C++ Programmers Test/Level 1

[Programmers] [C++] 두 개 뽑아서 더하기 / 없는 숫자 더하기

시카Dev 2024. 11. 30. 21:25

 

<문제 설명>
정수 배열 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> 헤더 파일 넣기!!