PS
2309. 일곱 난쟁이
tose33
2020. 8. 31. 18:21
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
브루트포스 문제.
9명의 난쟁이중 키의 합이 100인 난쟁이 7명을 찾는 것이다.
그 말은 다르게 말하면 (모든 난쟁이의 키의 합) - (두 명의 키의 합) = 100 이면
그 두명을 제외한 7명이 진짜 난쟁이이다.
#include <iostream>
using namespace std;
#include <algorithm>
int main() {
int arr[9];
int all = 0; // 9명의 난쟁이들의 키의 합
for(int i = 0; i < 9; i++) {
cin >> arr[i];
all += arr[i];
}
for(int i = 0; i < 8; i++) {
for(int j = i+1; j < 9; j++) {
if(all - (arr[i]+arr[j]) == 100) { // 모든 난쟁이 키 - 두 명 == 100이면
arr[i] = -1;
arr[j] = -1;
}
}
}
sort(arr, arr+9);
for(int i = 2; i < 9; i++) {
cout << arr[i] << endl;
}
}
int arr[9] 배열에 9명의 난쟁이 키 저장.
(모든 난쟁이 키의 합) - (두 명의 키) = 100 이 되는 두명 찾기위해 for 루프.
(0,1), (0,2), (0,3) ... (0,8)
(1,2), (1,3), (1,4) ... (1,8)
...
(7,8)
해당 되면 그 두명의 키를 -1 로 바꿈.
그후 배열을 정렬하면 -1이된 난쟁이가 아닌 두명이 맨 앞에 오게됨.
그 뒤부터는 다 난쟁이므로 출력.