본문 바로가기

백준

2309 일곱 난쟁이

이 문제는 뭔가 알고리즘 개념을 알아야 할 수 있을 것 같다. 그냥 그런 느낌이 든다. 문제 해석하는 것도 어렵지 않고 이해 하기는 쉬운데 방법을 모르겠다ㅋㅋ

 

내 생각에는 총 합을 구하고 그 합에서 100을 뺀 값이 다른 키를 가진 사람이라 생각했다. 그래서 두 사람의 키를 더한 값이 차와 같다면 그 두 사람을 제외하면 될 것 같았다. 

 

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v(9);
    for(int i = 0; i < 9; i++)
        scanf("%d", &v[i]);
        
    int sum = accumulate(v.begin(), v.end(), 0), sum2;
    int diff = sum - 100;
    
    for(int i = 0; i < 8; i++){
        for(int j = 1; j < 9; j++){
            sum2 = v[i] + v[j];
            if(sum2 == diff){
                v.erase(v.begin() + j);
                v.erase(v.begin() + i);
            }
        }
    }
    
    sort(v.begin(), v.end());
    for(int i = 0; i < 7; i++)
        printf("%d\n", v[i]);
    
}

보니깐 조금 이상한 부분이 있다.

sum2 == diff 이거 이렇게 하면 안될 것 같은데..

 

아니다 맞는 것 같다. 결과적으로 보면 합이 100인 7개가 있고 나머지가 다른 거니깐.. 

 

아 코드가 잘못됐다. j = 1이 아니고 j = i +1이 되어야 한다. 

 

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

int main() {
    vector<int> v(9);
    for(int i = 0; i < 9; i++)
        scanf("%d", &v[i]);
        
    int sum = accumulate(v.begin(), v.end(), 0), sum2;
    int diff = sum - 100;
    
    for(int i = 0; i < 8; i++){
        for(int j = i + 1; j < 9; j++){
            sum2 = v[i] + v[j];
            if(sum2 == diff){
                v.erase(v.begin() + j);
                v.erase(v.begin() + i);
            }
        }
    }
    
    sort(v.begin(), v.end());
    for(int i = 0; i < 7; i++)
        printf("%d\n", v[i]);
    
}

맞았다!! 오예에에에

'백준' 카테고리의 다른 글

1009 분산처리  (0) 2019.10.08
2902 KMP는 왜 KMP일까?  (0) 2019.10.08
2292 벌집  (0) 2019.10.07
2920 음계  (0) 2019.10.06
11720 숫자의 합  (0) 2019.10.06