백준 2309 일곱 난쟁이
본문 바로가기
알고리즘 모음집/알고리즘 (Algorithm)

백준 2309 일곱 난쟁이

by KyeongMin 2019. 7. 21.
728x90
반응형

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

풀이 방법은 여러가지가 있을수 있지만 간단한 풀이 방법을 소개해드리겠습니다.

현재 7명의 난쟁이의 합이 100임을 알고 있는 상황에서 9명의 난쟁이가 입력으로 주어집니다.

그럼 무조건 2명을 제외하면서 7명의 합이 100이 됨을 찾으면 풀이를 완료 할 수 있습니다.

그래서 처음에 9명의 난쟁이를 입력이 주어짐과 동시에 더합니다. 

전체 더해진 변수에 이중 포문을 이용하여 

(0,1) (0,2) ~ (7,8) 인덱스를 돌면서 전체 난쟁이키의 합을 저장한 변수에 두개의 난쟁이를 빼면서

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
#include<stdio.h>
#include<algorithm>
using namespace std;
int child[9];
 
int main(void)
{
    int ret = 0;
    for (int i = 0; i < 9; i++) {
        scanf("%d", child + i);
        ret += child[i];
    }
    sort(child, child + 9);
    for (int i = 8; i >= 1; i--) {
        for (int j = i -1; j >= 0; j--) {
            int hundred = (ret - (child[i] + child[j]));
            int flag = 0;
            if (hundred==100) {
                for (int y = 0; y < 9; y++) {
                    if (y == i || y == j)continue;
                    printf("%d\n", child[y]);
                    flag = 1;
                }
                if (flag == 1return 0;
            }
        }
    }
    return 0;
}
 
 

sort() 함수기준으로 함수가 호출 되기전이 전체 난쟁이 키를 합한경우이고 

이후 소스는 2명의 난쟁이를 뽑아 빼는경우와 뽑힌후 출력하는 소스입니다.

저는 처음에 문제를 키가 100이 정확히라는것이 아니 100이하면 되구나라고 잘못

생각을 하게 되서 문제를 한번 틀렸었는데 문제를 잘읽고 푸는 습관을 들이도록

합시다.!!!

오늘은 여기까지입니다. 감사합니다.

728x90
반응형

'알고리즘 모음집 > 알고리즘 (Algorithm)' 카테고리의 다른 글

백준 10974 모든 순열  (0) 2019.07.23
백준 16137 견우와 직녀  (0) 2019.07.23
백준 1062 가르침  (0) 2019.07.21
백준 14391 종이 조각  (0) 2019.07.21
백준 1748 수 이어 쓰기 1  (0) 2019.07.17

댓글