자료구조와 알고리즘/Baekjoon

[백준][C++] 2309번: 일곱 난쟁이

최문경 블로그 2019. 9. 29. 15:48

https://www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

처음 문제를 봤을 때: 와..키의 합이 100이 되는 7명을 어떻게 찾지..

 

라고 생각하면서 더했을 때 100이 된다는 것만 생각해서 도저히 실마리가 보이지 않았다.

 

그래서 역시 구글링.. 실마리는 빼기에 있었다..!

 

9명에서 2명을 뺐을 때 나머지 7명의 키가 100이면 되는 것이지 않는가!

 

개발자 지망생님의 블로그에서 본 풀이인데 나도 개발자 지망생님처럼 실력있는 지망생이 되고 싶다는 생각이 들었다. 코드가 정말 깔끔하고 이쁘다..

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <algorithm>
#define N 9
#define MAX 100
 
using namespace std;
 
int getSum(const int *arr) {
    int sum=0;
    for (int i = 0; i < N; i++) {
        sum += arr[i];
    }
    return sum;
}
 
int solution(int *arr) {
    int sum = getSum(arr);
 
    for (int i = 0; i < N; i++) {
        for (int j = i + 1; j < N; j++) {
            if (sum - (arr[i] + arr[j]) == MAX) {
                arr[i] = -1;
                arr[j] = -1;
                return 0;
            }
        }
    }
    return -1;
}
 
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    int arr[N];
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }
 
    solution(arr);
 
    sort(arr, arr + N);
 
    for (int i = 2; i < N; i++) {
        cout << arr[i] << endl;
    }
}
cs

 

 

출처: https://blockdmask.tistory.com/163