[C++] 2309 일곱 난쟁이

cherry_·2023년 10월 16일
0

코딩테스트 준비

목록 보기
12/15

문제

2309 일곱 난쟁이

정답

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

using namespace std;

int main()
{
    vector<int> height(9);
    int sum = 0;
    
    for(int i=0; i<9; i++){
        cin >> height[i];
        sum += height[i];
    }
    
    
    for(int i=0; i<9; i++){
        for(int j=i+1; j<9; j++){
            if(sum - height[i] - height[j] == 100){
                height.erase(height.begin()+i);
                height.erase(height.begin()+j-1);
                
                sort(height.begin(), height.end());
                for(auto i : height)
                    cout << i << "\n";
                    
                return 0;
            }   
        }    
    }

}

생각의 흐름

완전 탐색!
9개의 수가 주어지고 합이 100이 되는 7개의 수를 찾으면 된다.
100 - i1, i2, .... i7 = 0이 되는 걸 찾으면 됨.

  • 9개 중 7개를 골라서 합이 100이 되는지 검사하기.
    근데 잘 생각해보면 7개를 고르는 것보다 2개를 제하는 게 더 빠를 것 같다.
    9개 전체를 다 더함 = sum
    sum - for문으로 고른 2개 = 100?

기억할 것

나는 출력할 때 erase를 사용했는데

for (int k = 0; k < 9; k++) {
	if (k != i && k != j) {
		cout << v[k] << '\n';
	}
}

이게 더 간단 ㅠㅠ!
글구

  • v.erase(v.begin()+i) 사용법 또 까먹었다..ㅎㅎ 기억하기!

0개의 댓글