GitHubSeob

C++ / 프로그래머스 / 두 개 뽑아서 더하기 본문

Programmers/Level 1

C++ / 프로그래머스 / 두 개 뽑아서 더하기

GitHubSeob 2021. 8. 21.

문제

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

 

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

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

programmers.co.kr

문제풀이

숫자 두 개를 뽑아서 더하는 문제다, 더해서 같은 수가 나올 때 중복은 return에 포함되지 않는다.

숫자를 idx=0부터 크기-1만큼 반복하고, idx2는 idx값에 +1을 하여 크기만큼 반복한다.

이러면 반복문에서 같은 덧셈을 할 경우는 없다.

그러나 중복된 수는 answer에 저장이 된다.

중복된 수는 하나만 남기기 위해 정렬을 먼저 한다.

정렬된 후 현재 위치와 다음 위치를 비교해서 같은 수가 있을 경우 다음 위치의 수를 지워버린다.

수가 다를 경우는 idx를 1 더하여 다음 수로 넘어간다.

 

코드

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    sort(numbers.begin(), numbers.end());
    int idx = 0;
    int idx2 = 0;
    for (idx = 0; idx < numbers.size() - 1; ++idx) {
        for (idx2 = idx + 1; idx2 < numbers.size(); ++idx2) {
            answer.push_back(numbers[idx] + numbers[idx2]);
        }
    }
    sort(answer.begin(), answer.end());

    for (idx = 0; idx < answer.size() - 1;) {
        if (answer[idx] == answer[idx + 1]) answer.erase(answer.begin() + idx + 1);
        else idx++;
    }
    return answer;
}