[프로그래머스][C++] 두 개 뽑아서 더하기
두 개 뽑아서 더하기
문제 링크
분석
배열의 값에서 두 수를 더해 만들 수 있는 모든 합을 구한 뒤, 중복되지 않은 상태로 오름차순 정렬 된 값을 반환하는 문제입니다.
브루트포스로 접근을 해 두 수를 더하고, 해당 값을 이미 구했었는지 확인 후 추가하는 방법이 있습니다.
또는 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)
댓글남기기