두 개 뽑아서 더하기

문제 링크

두 개 뽑아서 더하기

분석

배열의 값에서 두 수를 더해 만들 수 있는 모든 합을 구한 뒤, 중복되지 않은 상태로 오름차순 정렬 된 값을 반환하는 문제입니다.

브루트포스로 접근을 해 두 수를 더하고, 해당 값을 이미 구했었는지 확인 후 추가하는 방법이 있습니다.
또는 std::set을 사용하는 방법이 있습니다.

std::set은 중복된 값을 저장하지 않고, 저장 시 오름차순으로 정렬 됩니다.

풀이

합이 이미 저장된 값인지 직접 확인하고, 추가하는 방법입니다.

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    
    for (int i = 0; i < numbers.size() - 1; ++i)
    {
        for (int j = i + 1; j < numbers.size(); ++j)
        {
            int sumNumber = numbers[i] + numbers[j];
            bool bIsFind = false;
            
            for (int k = 0; k < answer.size(); ++k)
            {
                if (answer[k] == sumNumber)
                {
                    bIsFind = true;
                }
            }
            
            if (false == bIsFind)
            {
                answer.push_back(sumNumber);
            }
        }
    }
    
    sort(answer.begin(), answer.end());
    
    return answer;
}

값을 더하고, 반복문으로 answr에 값이 저장돼있는지 확인 후 저장되어있지 않다면 값을 저장합니다.


std::set을 사용한 방법입니다.

#include <vector>
#include <set>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    set<int> temp;
    
    for (int i = 0; i < numbers.size() - 1; ++i)
    {
        for (int j = i + 1; j < numbers.size(); ++j)
        {
            temp.insert(numbers[i] + numbers[j]);
        }
    }
    
    answer.assign(temp.begin(), temp.end());
    
    return answer;
}

성능 요약

값이 저장 되어있는지 직접 확인하고 푼 성능입니다.

테스트 1 〉 통과 (0.01ms, 4.17MB)
테스트 2 〉 통과 (0.01ms, 3.63MB)
테스트 3 〉 통과 (0.01ms, 4.18MB)
테스트 4 〉 통과 (0.02ms, 4.19MB)
테스트 5 〉 통과 (0.02ms, 4.21MB)
테스트 6 〉 통과 (0.05ms, 3.65MB)
테스트 7 〉 통과 (0.56ms, 4.2MB)
테스트 8 〉 통과 (0.07ms, 4.2MB)
테스트 9 〉 통과 (0.02ms, 4.19MB)


테스트 1 〉 통과 (0.01ms, 3.68MB)
테스트 2 〉 통과 (0.01ms, 4.23MB)
테스트 3 〉 통과 (0.01ms, 4.02MB)
테스트 4 〉 통과 (0.01ms, 4.19MB)
테스트 5 〉 통과 (0.02ms, 4.2MB)
테스트 6 〉 통과 (0.05ms, 4.14MB)
테스트 7 〉 통과 (0.23ms, 3.69MB)
테스트 8 〉 통과 (0.11ms, 4.2MB)
테스트 9 〉 통과 (0.02ms, 4.14MB)

Programmers 카테고리 내 다른 글 보러가기

댓글남기기