문제
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
해설
입력값이 9개 밖에 되지 않아 전부 순열을 돌려도 그리 큰 수가 아니기에 순열을 통해 0~6까지의 인덱스에 위치한 값들의 합이 100이 되면 do-while문 종료 후 정렬 후 리턴
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<bits/stdc++.h>
using namespace std;
int main(){
int a;
int arr[9];
for(int i = 0; i<9;i++){
cin >> a;
arr[i] = a;
}
sort(arr,arr+9);
do{
int sum = accumulate(arr,arr+7,0);
if(sum == 100) {
sort(arr,arr+7);
cout << "\n\n";
for(int i=0 ; i<7; i++) {
cout << arr[i] << "\n";
}
break;
}
}while(next_permutation(arr,arr+9));
return 0;
}
|
cs |
추가 방법
- 순열을 이용하면 경우의 수가 줄어들어 더 빠르게 가능
- 매번 0~6까지의 합을 구하는 것이 아닌 (전체합 - 가짜난쟁이2명) = 100 이 되는 경우 찾기도 가능
'백준 알고리즘(C++)' 카테고리의 다른 글
백준 11655번 ROT13(C++) (0) | 2023.12.13 |
---|---|
백준 1159번 농구 경기(C++) (4) | 2023.12.06 |
백준 10988번 팬린드롬인지 확인하기(C++) (4) | 2023.12.06 |
백준 2979번 트럭 주차(C++) (1) | 2023.12.05 |
백준 10808 알파벳 개수(C++) (0) | 2023.12.04 |