프로그래밍/코딩테스트

코딩테스트 : 두 개 뽑아서 더하기

백사니 2025. 4. 17. 11:20
728x90
반응형

문제 설명

해당 문제는 정수 배열 numbers에서 서로 다른 인덱스에 있는 두 수를 골라 더할 수 있는 모든 경우의 수를 구하고, 그 결과를 오름차순 정렬된 배열로 반환하는 문제이다.

 

핵심 방법

중복 제거를 위해 set을 사용하면 코드가 간결해지고, 자동 정렬도 된다.

i와 j 쌍을 중복되지 않게 고르기 위해 j = i+1부터 시작하는 것이 중요하다.

 

set에 대한 자세한 설명은 아래 링크에 정리해두었다.

 

중복을 방지해주는 자료구조 Set

set은 중복을 허용하지 않는 자료구조이다. 즉 set에 중복된 값을 넣을 시 한 번만 저장된다. set은 2가지 종류가 있는데 set과 unordered_set이다. unordered_set은 unordered_map과 마찬가지로 

jinho082008.tistory.com

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

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;        // 결과를 담을 벡터
    set<int> s;                // 중복 제거 및 정렬을 위한 set 선언
    
    // 모든 서로 다른 두 수의 조합을 순회
    for(int i = 0; i < numbers.size(); ++i)
    {
        for(int j = i + 1; j < numbers.size(); ++j)
        {
            s.insert(numbers[i] + numbers[j]); // 두 수의 합을 set에 추가
        }
    }

    // set을 벡터로 변환 (자동 오름차순 정렬)
    answer.assign(s.begin(), s.end());
    
    return answer; // 결과 반환
}
728x90
반응형