2309번 문항 일곱 난쟁이 문항입니다.
제가 문제를 푼 순서입니다.
1. 아홉 난쟁이들을 우선 오름차순으로 정렬한다.
2. 두 난쟁이들을 제외하면서, 일곱 난쟁이들의 키의 합을 구한다.
3. 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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include<iostream> using namespace std; bool add_shortguys(int a, int b, int * _shortguys) //제외할 두 난쟁이의 index는 a,b입니다. { int sum = 0; for (int i = 0; i < 9; i++) { if (i == a || i == b) continue; //두 난쟁이들을 제외하고 sum += _shortguys[i]; //합을 구합니다. } if (sum == 100) { return true; } //총 합이 100이 되면 true값을 반환하고 else return false; //100이 아니라면 false값을 반환합니다. } int main() { int shortguys[9] = { 0 }; int temp; for (int i = 0; i < 9; i++) { cin >> shortguys[i]; } for (int j = 0; j < 8; j++) //우선 아홉난쟁이들을 오름차순으로 정렬합니다. { for (int i = 0; i < 9-(j+1); i++) { if (shortguys[i] > shortguys[i + 1]) { temp = shortguys[i]; shortguys[i] = shortguys[i + 1]; shortguys[i + 1] = temp; } } } for (int i = 0; i < 8; i++) //모든 경우의 수를 순서대로, 두 난쟁이들을 선정합니다. { for (int j = i + 1; j < 9; j++) { if (add_shortguys(i, j, shortguys) == true) //그렇게 선정된 난쟁이들을 만들어준 함수에 매개변수로 넘겨줍니다. { //일곱 난쟁이들의 합이 100임을 확인하면, true값을 반환합니다. for (int k = 0; k < 9; k++) //제외했던 두 난쟁이들을 제외하고 일곱난쟁이들을 출력합니다. { if (k == i || k == j) continue; cout<< shortguys[k]<<"\n"; } return 0; //출력을 완료하고 프로그램을 종료시켜야합니다.(유의하세요) } } } return 0; } | cs |
정답확인했습니다.
'백준 문제풀이 (C++) > 브루트 포스' 카테고리의 다른 글
[브루트 포스] 1476번 날짜 계산 풀이법 (0) | 2020.08.23 |
---|