GitHubSeob
C++ / 프로그래머스 / 두 개 뽑아서 더하기 본문
문제
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;
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 2016년 (0) | 2021.08.28 |
---|---|
C++ / 프로그래머스 / 위클리 챌린지 4주차 / 직업군 추천하기 (0) | 2021.08.26 |
C++ / 프로그래머스 / 예산 (0) | 2021.08.21 |
C++ / 프로그래머스 / 3진법 뒤집기 (0) | 2021.08.21 |
C++ / 프로그래머스 / 약수의 개수와 덧셈 (0) | 2021.08.21 |