π νλ‘κ·Έλλ¨Έμ€ / μμ νμ / Level2 / νΌλ‘λ
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
π λ¬Έμ
XXκ²μμλ νΌλ‘λ μμ€ν (0 μ΄μμ μ μλ‘ ννν©λλ€)μ΄ μμΌλ©°, μΌμ νΌλ‘λλ₯Ό μ¬μ©ν΄μ λμ μ ννν μ μμ΅λλ€. μ΄λ, κ° λμ λ§λ€ ννμ μμνκΈ° μν΄ νμν "μ΅μ νμ νΌλ‘λ"μ λμ ννμ λ§μ³€μ λ μλͺ¨λλ "μλͺ¨ νΌλ‘λ"κ° μμ΅λλ€. "μ΅μ νμ νΌλ‘λ"λ ν΄λΉ λμ μ νννκΈ° μν΄ κ°μ§κ³ μμ΄μΌ νλ μ΅μνμ νΌλ‘λλ₯Ό λνλ΄λ©°, "μλͺ¨ νΌλ‘λ"λ λμ μ ννν ν μλͺ¨λλ νΌλ‘λλ₯Ό λνλ λλ€. μλ₯Ό λ€μ΄ "μ΅μ νμ νΌλ‘λ"κ° 80, "μλͺ¨ νΌλ‘λ"κ° 20μΈ λμ μ νννκΈ° μν΄μλ μ μ μ νμ¬ λ¨μ νΌλ‘λλ 80 μ΄μ μ΄μ΄μΌ νλ©°, λμ μ ννν νμλ νΌλ‘λ 20μ΄ μλͺ¨λ©λλ€.
μ΄ κ²μμλ ν루μ ν λ²μ© ννν μ μλ λμ μ΄ μ¬λ¬κ° μλλ°, ν μ μ κ° μ€λ μ΄ λμ λ€μ μ΅λν λ§μ΄ νννλ € ν©λλ€. μ μ μ νμ¬ νΌλ‘λ kμ κ° λμ λ³ "μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"κ° λ΄κΈ΄ 2μ°¨μ λ°°μ΄ dungeons κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μ μ κ° ννν μ μλ μ΅λ λμ μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
π« μ ν μ¬ν
- kλ 1 μ΄μ 5,000 μ΄νμΈ μμ°μμ λλ€.
- dungeonsμ μΈλ‘(ν) κΈΈμ΄(μ¦, λμ μ κ°μ)λ 1 μ΄μ 8 μ΄νμ
λλ€.
- dungeonsμ κ°λ‘(μ΄) κΈΈμ΄λ 2 μ λλ€.
- dungeonsμ κ° νμ κ° λμ μ ["μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"] μ λλ€.
- "μ΅μ νμ νΌλ‘λ"λ νμ "μλͺ¨ νΌλ‘λ"λ³΄λ€ ν¬κ±°λ κ°μ΅λλ€.
- "μ΅μ νμ νΌλ‘λ"μ "μλͺ¨ νΌλ‘λ"λ 1 μ΄μ 1,000 μ΄νμΈ μμ°μμ λλ€.
- μλ‘ λ€λ₯Έ λμ μ ["μ΅μ νμ νΌλ‘λ", "μλͺ¨ νΌλ‘λ"]κ° μλ‘ κ°μ μ μμ΅λλ€.
π μ μΆλ ₯ μ
| k | dungeons | result |
| 80 | [[80,20],[50,40],[30,10]] | 3 |
π€ νμ΄ λ°©λ²
β‘οΈ μμ΄ μμ νμ
// κΈ°μ΄ μ½λ
static void perm(int[] arr, int[] output, boolean[] visited, int depth, int n, int r) {
if (depth == r) {
print(output, r);
return;
}
for (int i=0; i<n; i++) {
if (visited[i] != true) {
visited[i] = true;
output[depth] = arr[i];
perm(arr, output, visited, depth + 1, n, r);
visited[i] = false;;
}
}
}


β‘οΈ μ μ½λλ₯Ό κΈ°λ°μΌλ‘ λ¬Έμ μν©μ λ§κ² μμ νμ¬ μ½λλ₯Ό μμ±νμλ€.
public static void perm (int[][] arr, boolean[] visited, int depth, int k, boolean ok)
1οΈβ£ int[ ][ ] arr : μ£Όμ΄μ§ 2μ°¨μ λ°°μ΄
2οΈβ£ boolean[ ] visited : μμ΄ μ‘°ν©μ μ¬μ©νκΈ° μν λ°°μ΄ (ν΄λΉ λ¬Έμ μμμ λμ μ λ°©λ¬Ένμλ€λ μλ―Έ X)
3οΈβ£ int depth : μμ΄ μ‘°ν©μ μ¬μ©νκΈ° μν λ³μ
4οΈβ£ int k : λ¬Έμ μμ μ£Όμ΄μ§ νΌλ‘λ
5οΈβ£ boolean ok : μ΄μ λμ μ λ°©λ¬Έμ¬λΆλ₯Ό μ μ₯νκΈ°μν λ³μ
β‘οΈ λ¬Έμ λ₯Ό νλ©΄μ κ°μ₯ μ κ²½μΌλ λΆλΆμ μ¬κ· ν¨μλ₯Ό νΈμΆ ν ν return νμμ λ μλ μνλ‘ λλ리기 μν κ³Όμ μ΄μλ€.
κ²½μ° β μ΄μ λμ μ λ°©λ¬Έν κ²½μ° β‘οΈ ok κ° true μ΄λ―λ‘ νΌλ‘λμ λμ λ°©λ¬Έ νμ sol μ μμ 볡ꡬ μν¨λ€
κ²½μ° β‘ μ΄μ λμ μ λ°©λ¬Ένμ§ μμ κ²½μ° β‘οΈ ok κ° false μ΄λ―λ‘ νΌλ‘λμ λμ λ°©λ¬Έ νμλ₯Ό 볡ꡬν νμκ° μλ€
π» νμ΄ μ½λ
class Solution {
public static int answer = 0;
public static int sol = 0;
public int solution(int k, int[][] dungeons) {
perm(dungeons, new boolean[dungeons.length], 0, k, false);
return answer;
}
public static void perm (int[][] arr, boolean[] visited, int depth, int k, boolean ok) {
if (depth == arr.length) {
if (sol > answer) {
answer = sol;
}
return;
}
for (int i=0; i<arr.length; i++) {
if (visited[i] != true) {
visited[i] = true;
if (k >= arr[i][0]) {
k -= arr[i][1];
sol++;
ok = true;
}
else {
ok = false;
}
perm(arr, visited, depth+1, k, ok);
visited[i] = false;
if (ok) {
k += arr[i][1];
sol--;
}
}
}
}
}
[level 2] Title: νΌλ‘λ, Time: 0.08 ms, Memory: 77.2 MB -BaekjoonHub · Young998904/Practice_Algorithm_Auto@f1962cc
Show file tree Showing 2 changed files with 236 additions and 0 deletions.
github.com