728x90
https://programmers.co.kr/learn/courses/30/lessons/87946
코딩테스트 연습 - 12주차
XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던
programmers.co.kr
문제 풀이
* 완전 탐색
public class Solution {
int n, a[], ds[][], ans_max;
boolean v[];
public void perm(int j, int k) {
if (j == n) {
int ans = 0, d[];
for (int i = 0; i < n; ++i) {
d = ds[a[i]];
if (k < d[0]) break;
ans++;
k -= d[1];
}
ans_max = ans_max < ans ? ans : ans_max;
}
for (int i = 0; i < n; ++i) {
if (!v[i]) {
v[i] = true;
a[j] = i;
perm(j + 1, k);
v[i] = false;
}
}
}
public int solution(int k, int[][] dungeons) {
n = dungeons.length;
a = new int[n];
v = new boolean[n];
ds = dungeons;
ans_max = 0;
perm(0, k);
return ans_max;
}
}
던전의 개수가 최대 8개 이므로, 완전 탐색 수행 가능
* DFS
public class Solution {
int n, ds[][], ans;
boolean v[];
public void dfs(int k, int a) {
int d[];
for (int i = 0; i < n; ++i) {
d = ds[i];
if (!v[i] && d[0] <= k) {
v[i] = true;
dfs(k - d[1], a + 1);
v[i] = false;
}
}
ans = Math.max(a, ans);
}
public int solution(int k, int[][] dungeons) {
n = dungeons.length;
ds = dungeons;
ans = 0;
v = new boolean[n];
dfs(k, 0);
return ans;
}
}
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][자바(java)] (Lv4) 도둑질 (0) | 2021.11.06 |
---|---|
[프로그래머스(Programmers)][자바(java)] (Lv4) 올바른 괄호의 개수 (0) | 2021.10.28 |
[프로그래머스(Programmers)][자바(java)] (Lv3) 11주차 - 아이템 줍기 <위클리 챌린지> (0) | 2021.10.20 |
[프로그래머스(Programmers)][자바(java)] (Lv2) n^2 배열 자르기 <월간코드챌린지3> (0) | 2021.10.16 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 나머지가 1이 되는 수 찾기 <월간코드챌린지3> (0) | 2021.10.16 |