Baekjoon Online Judge

[c++]2309.일곱난쟁이

kickerLit 2021. 9. 21. 23:29

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

 

내가 푼 해결법의 로직은 

우선 입력값을 배열로 받고

선택정렬로 오름차순으로 정렬한 후

9명의 난쟁이들의 입력된 키 값 -100 을 통해

가짜 난쟁이들 두명의 키 값의 합을 구하고

이 합에 해당되는 가짜 난쟁이들의 idx를 알아내서

그 idx를 제외한 배열의 element들을 출력하는 것이다.

 

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>
using namespace std;
 
int main() {
    int i, a[9], n, idx, j, tmp, sum, fake1, fake2;
    n = 9;
    
    fake1 = 9;
    fake2 = 9;
    sum = 0//아홉난쟁이의 키의 합
    for (i = 0; i < n; i++) {
        scanf("%d"&a[i]);
        sum += a[i];
    }
 
    sum -= 100//난쟁이를 골라내기 위한.. 변수
 
    //선택정렬
    for (i = 0; i < n-1; i++) {
        idx = i;
        for (j = i + 1; j < n; j++) {
            if (a[j] < a[idx]) {
                idx = j;
            }
        }
        tmp = a[i];
        a[i] = a[idx];
        a[idx] = tmp;
    } 
 
    for (i = 0; i < n-1; i++) {
        for (j = i + 1; j < n; j++) {
            if ((a[i] + a[j]) == sum) {
                fake1 = i;
                fake2 = j;
                break;
            }
        }
 
        if (fake1 != 9break//가짜 난쟁이를 찾으면
    }
 
    for (i = 0; i < n; i++) {
        if (fake1 == i || fake2 == i) continue;
        printf("%d \n", a[i]);
    }
 
}
cs

 

 

뭔가 씨쁠쁠이라 넘어갔지 파이썬으로 풀었음 시간초과났을 것 같은 

풀이였다.

'Baekjoon Online Judge' 카테고리의 다른 글

[python]13706. 제곱근  (0) 2021.09.28
[python]1182. 부분수열의 합  (0) 2021.04.29
[python]7568. 덩치  (2) 2021.04.29
[python]1914.하노이 탑  (0) 2021.02.11
[python]10814.나이순 정렬  (4) 2021.02.03