<문제 설명>
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는
두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아
return 하도록 solution 함수를 완성해주세요.
<제한사항>
numbers의 길이는 2 이상 100 이하입니다.
numbers의 모든 수는 0 이상 100 이하입니다.
<입출력 예>
numbers result
[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]
<입출력 예 설명>
- 입출력 예 #1
2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
3 = 2 + 1 입니다.
4 = 1 + 3 입니다.
5 = 1 + 4 = 2 + 3 입니다.
6 = 2 + 4 입니다.
7 = 3 + 4 입니다.
따라서 [2,3,4,5,6,7] 을 return 해야 합니다.
- 입출력 예 #2
2 = 0 + 2 입니다.
5 = 5 + 0 입니다.
7 = 0 + 7 = 5 + 2 입니다.
9 = 2 + 7 입니다.
12 = 5 + 7 입니다.
따라서 [2,5,7,9,12] 를 return 해야 합니다.
#include <string>
#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++)
answer.push_back(numbers[i] + numbers[j]);
sort(answer.begin(), answer.end());
answer.erase(unique(answer.begin(), answer.end()), answer.end());
return answer;
}
1) 첫번째 숫자와 그 뒤 숫자를 차례로 더한다. 이후 두번째 숫자와 그 뒤 숫자를 차례로 더한다. 그 이후는 배열의 끝까지!!
2) 더한 것을 배열에 추가한다
3) 정렬로 배열을 오름차순 정리한다
4) 1번에서 당연히 중복된 숫자가 있을 것이고... 이것은 erase와 unique 조합으로 중복된 것은 배열의 맨 뒤로 보낸 뒤 모두 지운다
정말 유용한 sort와 unique 함수!! 알고리즘 헤더파일 잊지 말기!
erase+unique 조합할 때 소괄호 짝이 잘 이어지게끔 신경 쓰기!!
<문제 설명>
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다.
numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를
return 하도록 solution 함수를 완성해주세요.
<제한사항>
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.
<입출력 예>
numbers result
[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6
<입출력 예 설명>
- 입출력 예 #1
5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.
- 입출력 예 #2
1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.
#include <string>
#include <vector>
#include <numeric>
using namespace std;
int solution(vector<int> numbers) {
return 45 - accumulate(numbers.begin(), numbers.end(), 0);
}
1) numbers 배열은 무조건 0부터 9까지 이루어져 있음
2) 중간중간 빠진 숫자를 찾아야 함, 그리고 그걸 다 더해야 함
3) 0부터 10까지 있는 다른 배열을 선언하고 1번의 배열과 일일히 대조하며 체크할까...?
4) 그런데 어차피 체크되지 못한 숫자도 다 더해야 하지 않나?
5) 에라이 0부터 10까지 총합은 45다!! 이는 즉 0부터 10까지 있는 배열의 값을 선언하는 것과 다름 없다!!(?)
6) 결국 45에서 1번의 배열 총합을 뺀다!
벡터 배열 총합은 accmulate(시작점, 끝점, 초기값) 함수를 이용하자!!
그리고 <numeric> 헤더 파일 넣기!!
'C++ Programmers Test > Level 1' 카테고리의 다른 글
[Programmers] [C++] 음양 더하기 / 하샤드 수 (0) | 2024.12.30 |
---|---|
[Programmers] [C++] 행렬의 덧셈 / 같은 숫자는 싫어 (1) | 2024.12.02 |
[Programmers] [C++] 직사각형 별찍기 / 부족한 금액 계산하기 (0) | 2024.08.16 |
[Programmers] [C++] 문자열 다루기 기본 / 자릿수 더하기 (0) | 2024.08.05 |
[Programmers] [C++] x만큼 간격이 있는 n개의 숫자 / 핸드폰 번호 가리기 (0) | 2024.07.29 |