문제
백준 2309번
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
코드
#include<iostream>
#include<algorithm>
using namespace std;
int arr[10];
int sum = 0, fake1, fake2;
int main() {
for (int i = 0; i < 9; i++) {
cin >> arr[i];
sum += arr[i];
}
sort(arr, arr + 9);
for (int i = 0; i < 9; i++) {
for (int j = i + 1; j < 9; j++) {
if (sum - arr[i] - arr[j] == 100) {
fake1 = i; fake2 = j;
break;
}
}
}
for (int i = 0; i < 9; i++) {
if (i == fake1 || i == fake2) continue;
cout << arr[i] << '\n';
}
}
풀이방법
난쟁이를 키순서대로 오름차순으로 정렬한 뒤, 한쌍의 난쟁이를 돌아가며 뽑는다. 나머지 7명의 키의 합이 100이 되면 뽑힌 난쟁이 쌍을 제외한 나머지 난쟁이들의 키를 출력한다.
고민과정
어떻게 유입난쟁이를 제외하고 나머지만 출력할지 고민했다. 미리 sort함수로 오름차순 정렬을 한 뒤에, 제외했을 때 키가 100이 되는 난쟁이가 몇 번째인지 저장해두고 그 숫자들만 출력하지 않는 방식으로 해결했다.
'algorithm > Bruteforce & Backtracking' 카테고리의 다른 글
[C++] BOJ 2798 JACK 블랙잭 (0) | 2021.04.03 |
---|---|
[C++] BOJ 18111 마인크래프트 (0) | 2021.04.03 |
[C++] BOJ 1120 문자열 (0) | 2021.04.03 |
[C++] BOJ 2231 Digit Generator 분해합 (0) | 2021.04.02 |