본문 바로가기
코딩테스트/프로그래머스(lv1)

[프로그래머스 Level 1] 두개 뽑아서 더하기 (C++)

by 모닥불꽃 2021. 1. 24.
반응형

programmers.co.kr/learn/courses/30/lessons/68644

 

코딩테스트 연습 - 두 개 뽑아서 더하기

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한

programmers.co.kr

두개 뽑아서 더하기 문제

구현 방법

해당 문제는, 주어진 numbers배열에 있는 숫자들 중 두 개를 뽑아 더해서 구할 수 있는 모든 경우의 수를 구하는 문제입니다.

 

문제를 보자마자 생각난 로직은 다음과 같습니다.

 

예를 들어 5개의 숫자가 주어졌을 때,

1번째 원소와, 2번째, 3번째, 4번째, 5번째를 더한 숫자를 저장,

2번째 원소와, 3번째, 4번째, 5번째를 더한 숫자를 저장,

3번째 원소와, 4번째, 5번째를 더한 숫자를 저장,

4번째 원소와, 5번째를 더한 숫자를 저장시켜줍니다.

 

모든 가능한 경우의 수를 저장시켜 준 것이니, 이들 중 중복된 값을 제거하고 정렬해주면 끝납니다.

 

소스 코드

#include <bits/stdc++.h>
using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    
    //1과 2,3,4,5 더하고, 2와 3,4,5 더하고, 3과 4,5 더하한 모든 경우의수를
    //answer 배열에 저장 시켜준다.
    for(int i=0;i<(numbers.size()-1);i++) {
        for(int j=i+1;j<numbers.size();j++) {
            answer.push_back(numbers[i] + numbers[j]);
        }
    }
    
    //answer 배열을 정렬하고, erase와 unique함수를 사용해 중복된 값을 제거해준다.
    sort(answer.begin(),answer.end());
    answer.erase(unique(answer.begin(),answer.end()),answer.end());

    return answer;
}
반응형

댓글