알고리즘/백준

백준 2309 일곱 난쟁이 c++ [컴공과고씨]

시간빌게이츠 2022. 3. 28. 14:27
반응형

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

입력을 받은 총합에서 2개의 값을 빼주었을 때 값이 100이 되는 것을 찾아서 출력해주었다.

브루트 포스(brute force) 유형의 문제였다.

 

단계별 문제 풀이

1. 입력 값을 배열에 저장 그리고 전체 합을 저장

2. 정렬 -> 나중에 출력을 오름차순으로 해야하기 때문에 미리 sort해줌

3. 이중 포문을 이용하여 2개의 값을 빼면서 합이 100이 되는 것을 찾음

구조

이중 포문 구현 구조

4. 합이 100이 될 경우 2개를 제외한 나머지 애들을 출력

 

전체 코드

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
#include <iostream>
#include <algorithm>
using namespace std;
 
int main(){
    int tall[10];
    int sum = 0;
    for (int i = 0; i < 9;i++){
        cin >> tall[i];
        sum += tall[i]; // 전체 합
    }
    sort(tall, tall + 9); // 미리 정렬
    for (int i = 0; i < 8; i++){
        for (int j = i + 1; j < 9;j++){
            if(sum-(tall[i]+tall[j]) == 100){ 
                // 2명을 뺀 값의 합이 100이 되면
                for (int z = 0; z < 9;z++){
                    if(z != i  && z != j){ // 2명 빼고 출력
                        cout << tall[z] << '\n';
                    }
                }
                return 0;
            }   
        }
    }
    return 0;
//8 min
cs

 

사용 알고리즘 : 브루트 포스(brute force)

 

주관 평가

체감 난이도 걸린 시간 참고 비고
8min x x

 

yea!

반응형