백준/구현

[백준 2309번/ C++] 일곱 난쟁이

배발자 2022. 1. 17.
반응형

 

 

<next_permutation> 모든 경우의 수 정렬

벡터를 정렬할 때 정렬 될 수 있는 모든 경우의 수를 물어보는 문제가 있다. 이러한 경우 해당 함수를 사용한다. 즉, A B C 를 정렬하고 싶은데 모든 경우를 정렬하면, ABC ACB BAC BCA CAB CBA 순으로 정

baebalja.tistory.com


이 문제는 next_permutaion 함수를 사용하면 된다. 

해당 함수를 모른다면 위의 링크에 가서 한번 숙지하고 오자. 

 

9명의 난쟁이 중에 일곱 난쟁이의 키의 합이 100이 됐을 때 난쟁이의 키를 오름차순으로 출력하면 된다.

 

즉, next_permutaion 함수를 사용해서 모든 경우의 수를 살펴보면서 첫 인덱스부터 7번째 인덱스까지 

합산하여 그 값이 100이면 멈추고 이에 해당하는 난쟁이의 키를 순서대로 출력하면 되는 것이다. 

 

일곱 난쟁이를 찾을 수 없는 경우는 없다고 하니 다음 코드처럼 구현하면 된다. 

#include <iostream>
#include <algorithm>
using namespace std; 
int a[9]; 
int main() {
	for (int i = 0; i < 9; i++) {
		cin >> a[i]; 
	}
	sort(a, a + 9); 
	do {
		int sum = 0; 
		for (int i = 0; i < 7; i++)sum += a[i]; 
		if (sum == 100)break; 
	} while (next_permutation(a, a + 9)); 
	for (int i = 0; i < 7; i++)cout << a[i] << "\n"; 
	return 0; 

}
 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

반응형

댓글