<풀이>
1. 선반 높이와 점원들의 키를 입력받는다.
2. 점원들의 키를 사용하여 얻을 수 있는 선반 높이 중, 선반 높이보다 크면서 가장 가까운 값을 출력한다.
<해법>
1. 점원들이 만들 수 있는 탑 높이를 계산하는 방법
=> 모든 경우를 다 해보아야합니다. 각각의 점원을 사용할지 안할지를 정하고, 모든 점원의 사용여부가 결정되었을때 결과를 갱신합니다.
저는 위 그림과 같은 상태공간트리가 그려지도록 구현하였습니다.
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
56
57
58
59
|
#include <iostream>
#include <string.h>
#include <algorithm>
#define INF 987654321
using namespace std;
int N, B;
int H[20];
int answer;
void makeTower(int index, int sumHeight) {
//종료조건
if (index == N) {
if (sumHeight >= B) {
//결과 갱신
answer = min(answer, sumHeight);
}
return;
}
//현재 탑을 쌓는 경우 해보기
makeTower(index + 1, sumHeight + H[index]);
//현재 탑을 쌓지 않는 경우 해보기
makeTower(index + 1, sumHeight);
}
int main() {
int test_case;
int T;
cin >> T;
for (test_case = 1; test_case <= T; test_case++) {
//초기화
N = 0, B = 0;
memset(H, 0, sizeof(H));
answer = INF;
//입력
cin >> N >> B;
for (int i = 0; i < N; i++) {
cin >> H[i];
}
//해법
makeTower(0, 0);
//출력
cout << "#" << test_case << " " << answer - B << "\n";
}
//종료
return 0;
}
|
브루트포스에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[C++] SWEA 5653 - 줄기세포배양 (0) | 2022.11.29 |
---|---|
[C++] SWEA 2115 - 벌꿀채취 (0) | 2022.11.28 |
[C++] SWEA 1861 - 정사각형 방 (0) | 2021.01.21 |
[C++] SWEA 4408 - 자기 방으로 돌아가기 (0) | 2021.01.17 |
[C++] SWEA 3752 - 가능한 시험 점수 (0) | 2021.01.13 |