PS

BOJ 2309 - 일곱 난쟁이

728x90

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

Brute Force 알고리즘에 대한 기초 연습을 할 수 있는 문제

 

- c++

#include <algorithm>
#include <iostream>
 
using namespace std;
 
int keys[9];
int sum;
bool checked;
 
int main() {
    cin.tie(nullptr);
    ios_base::sync_with_stdio(false);
 
    for (int i = 0; i < 9; i++) {
        cin >> keys[i];
        sum += keys[i];
        // 모든 수의 합을 더하고
    }
 
    for (int x = 0; x < 9; x++) {
        if (checked) break;  // 100 이 된 경우 반복문 탈출
        for (int y = 0; y < 9; y++) {
            if (keys[x] == keys[y]) continue;      // 같은 값일 경우 중복 제거를 위해 continue 사용
            if (sum - keys[x] - keys[y] == 100) {  // 100 이 되는 경우 찾은 경우 이므로,
                checked = true;
                keys[x] = 0;
                keys[y] = 0;
                break;
            }
        }
    }
 
    sort(keys, keys + 9);
 
    for (int i = 0; i < 9; i++) {
        if (keys[i] != 0) {
            cout << keys[i] << '\n';
        }
    }
 
    return 0;
}
cs

 

 

 

 

 

브루트포스 문제를 풀때

핵심은 모든 경우의 수를 전부 탐색해서 

조건을 만족하는 대상을 찾아 답을 찾는것.

 

위 문제는 입력의 크기가 작아서 O(N^2) 로도 풀었지만

더 큰 입력이 나오면 O(N^2) 부터는 통과하지 못하므로,

O(NlogN) 이하로 더 줄여야한다.

728x90

'PS' 카테고리의 다른 글

BOJ 2231 - 분해합  (0) 2020.08.12
BOJ 2042 - 구간 합 구하기  (0) 2020.08.11
BOJ 1002 - 터렛  (0) 2020.08.07
BOJ 1759 - 암호 만들기  (0) 2020.08.05
BOJ 3613 - Java vs C++  (0) 2020.08.02