Skip to content

Commit e7c313d

Browse files
committed
[level 2] Title: 피로도, Time: 7.05 ms, Memory: 75.4 MB -BaekjoonHub
1 parent 254dfac commit e7c313d

File tree

2 files changed

+121
-0
lines changed

2 files changed

+121
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# [level 2] 피로도 - 87946
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/87946)
4+
5+
### 성능 요약
6+
7+
메모리: 75.4 MB, 시간: 7.05 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 완전탐색
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2026년 02월 16일 17:43:32
20+
21+
### 문제 설명
22+
23+
<p>XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.</p>
24+
25+
<p>이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다. 유저의 현재 피로도 k와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons 가 매개변수로 주어질 때, 유저가 탐험할수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.</p>
26+
27+
<h5>제한사항</h5>
28+
29+
<ul>
30+
<li>k는 1 이상 5,000 이하인 자연수입니다.</li>
31+
<li>dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.
32+
33+
<ul>
34+
<li>dungeons의 가로(열) 길이는 2 입니다.</li>
35+
<li>dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"] 입니다.</li>
36+
<li>"최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같습니다.</li>
37+
<li>"최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수입니다.</li>
38+
<li>서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있습니다. </li>
39+
</ul></li>
40+
</ul>
41+
42+
<h5>입출력 예</h5>
43+
<table class="table">
44+
<thead><tr>
45+
<th>k</th>
46+
<th>dungeons</th>
47+
<th>result</th>
48+
</tr>
49+
</thead>
50+
<tbody><tr>
51+
<td>80</td>
52+
<td>[[80,20],[50,40],[30,10]]</td>
53+
<td>3</td>
54+
</tr>
55+
</tbody>
56+
</table>
57+
<h5>입출력 예 설명</h5>
58+
59+
<p>현재 피로도는 80입니다.</p>
60+
61+
<p>만약, 첫 번째 → 두 번째 → 세 번째 던전 순서로 탐험한다면</p>
62+
63+
<ul>
64+
<li>현재 피로도는 80이며, 첫 번째 던전을 돌기위해 필요한 "최소 필요 피로도" 또한 80이므로, 첫 번째 던전을 탐험할 수 있습니다. 첫 번째 던전의 "소모 피로도"는 20이므로, 던전을 탐험한 후 남은 피로도는 60입니다.</li>
65+
<li>남은 피로도는 60이며, 두 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 50이므로, 두 번째 던전을 탐험할 수 있습니다. 두 번째 던전의 "소모 피로도"는 40이므로, 던전을 탐험한 후 남은 피로도는 20입니다.</li>
66+
<li>남은 피로도는 20이며, 세 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 30입니다. 따라서 세 번째 던전은 탐험할 수 없습니다.</li>
67+
</ul>
68+
69+
<p>만약, 첫 번째 → 세 번째 → 두 번째 던전 순서로 탐험한다면</p>
70+
71+
<ul>
72+
<li>현재 피로도는 80이며, 첫 번째 던전을 돌기위해 필요한 "최소 필요 피로도" 또한 80이므로, 첫 번째 던전을 탐험할 수 있습니다. 첫 번째 던전의 "소모 피로도"는 20이므로, 던전을 탐험한 후 남은 피로도는 60입니다.</li>
73+
<li>남은 피로도는 60이며, 세 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 30이므로, 세 번째 던전을 탐험할 수 있습니다. 세 번째 던전의 "소모 피로도"는 10이므로, 던전을 탐험한 후 남은 피로도는 50입니다.</li>
74+
<li>남은 피로도는 50이며, 두 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 50이므로, 두 번째 던전을 탐험할 수 있습니다. 두 번째 던전의 "소모 피로도"는 40이므로, 던전을 탐험한 후 남은 피로도는 10입니다.</li>
75+
</ul>
76+
77+
<p>따라서 이 경우 세 던전을 모두 탐험할 수 있으며, 유저가 탐험할 수 있는 최대 던전 수는 3입니다.</p>
78+
79+
<hr>
80+
81+
<p>※ 공지 - 2022년 2월 25일 테스트케이스가 추가되었습니다.</p>
82+
83+
84+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution {
2+
3+
private int answer = 0;
4+
5+
public int solution(int k, int[][] dungeons) {
6+
calculateDungeons(dungeons, 0, k);
7+
return answer;
8+
}
9+
10+
private void calculateDungeons(int[][] arr, int depth, int k) {
11+
int count = 0;
12+
if (depth == arr.length) {
13+
for (int[] dungeonInfo : arr) {
14+
if (k >= dungeonInfo[0]) {
15+
k -= dungeonInfo[1];
16+
count++;
17+
} else {
18+
break;
19+
}
20+
}
21+
22+
answer = Math.max(answer, count);
23+
}
24+
25+
for (int i = depth; i < arr.length; i++) {
26+
swap(arr, depth, i);
27+
calculateDungeons(arr, depth + 1, k);
28+
swap(arr, depth, i);
29+
}
30+
}
31+
32+
private void swap(int[][] arr, int i, int j) {
33+
int[] temp = arr[i];
34+
arr[i] = arr[j];
35+
arr[j] = temp;
36+
}
37+
}

0 commit comments

Comments
 (0)