๋ฌธ์ ์์ฝ
์๊ถ๋ํ์์ ๋ผ์ด์ธ์ด ์ฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ๋ค ์ค ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ return,
์๋ค๋ฉด [-1] return
[๋ฌธ์ ์ค๋ช ๋ฐ ์ ํ ์กฐ๊ฑด]
- ์ดํผ์น์ ๋ผ์ด์ธ์ด ์๊ถ๋ํ ๊ฒฐ์น์ ์ ์ฌ๋ผ์๋ค.
- ๋ค์ํ ์ ์๊ฐ ์๊ถ๋ํ์์ ์ฐ์นํ ์ ์๋๋ก ํ๊ธฐ ์ํด, ์ด์์์ํ๋ ๋ผ์ด์ธ์๊ฒ ๋ถ๋ฆฌํ๋๋ก ๊ฒฐ์น์ ๊ท์น์ ์ ํ์๋ค.
- k์ ์ ์ฌ๋ฌ๋ฐ์ ๋ง์ถ์๋๋ผ๋, k์ ๋ง ํ๋ํ ์ ์๋ค.
- k์ ์ ์ดํผ์น๊ฐ a๋ฐ, ๋ผ์ด์ธ์ด b๋ฐ์ ๋ง์ท์ ๊ฒฝ์ฐ, a >= b ์ผ ๊ฒฝ์ฐ์ ์ดํผ์น๊ฐ k ์ ์ ํ๋ํ๋ค.
[์ ์ถ๋ ฅ]
- n: ๊ฐ ์๊ถ ์ ์๊ฐ ํ์ด์ ์ ์ ์๋ ์ด ๊ฐ์ (1 ≤ n ≤ 10)
- info: ์ดํผ์น๊ฐ ์ ํ์ด์ ์ ๋ณด (0 ≤ info์ ์์ ≤ n, info์ ์์ ์ดํฉ = n)
- ๋ผ์ด์ธ์ด ์ดํผ์น๋ฅผ ์ด๊ธธ ์ ์๋ ๊ฒฝ์ฐ์๋ [-1] return
- ๋ผ์ด์ธ์ด ์ดํผ์น๋ฅผ ์ด๊ธธ ์ ์๋ค๋ฉด ์ด๊ธธ ์ ์๋ ๊ฒฝ์ฐ ์ค, ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ return
n | info | result |
5 | [2,1,1,1,0,0,0,0,0,0,0] | [0,2,2,0,1,0,0,0,0,0,0] |
- info์ i ๋ฒ์งธ ์์๋ ๊ณผ๋ ์ 10-i ์ ์ ๋งํ ํ์ด์ ๊ฐ์
- ์ฆ, 0๋ฒ์งธ ์์์ ์ ์๋ 10์
- 1๋ฒ์งธ ์์์ ์ ์๋ 9์
๋ฌธ์ ์ ๊ทผ
- ๊น์ด์ฐ์ ํ์(dfs)์ ๋ฐฑํธ๋ํน์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
- ๋์ ์ ์๋ถํฐ ๋ผ์ด์ธ์ด ์ ํ์ด์ ๊ฐ์๋ฅผ ํ์ํ๊ธฐ ๋๋ฌธ์, ๋ผ์ด์ธ์ด ๊ฐ์ฅ ํฐ ์ ์์ฐจ์ด๋ก ์ฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๊ฐ ์ต์ข return ๋ฉ๋๋ค.
์์ธํ ์ ๊ทผ ๋ฒ์ ์ฝ๋์ ์ฃผ์์ ํ์ธํ์ธ์ ๐
// 22. 06. 11. ํ - 2022 ์นด์นด์ค ๋ธ๋ผ์ธ๋ - Lv.2 - ์๊ถ๋ํ
public class Solution {
public static void main(String[] args) {
solution(5, new int[]{2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0});
}
public static int[] solution(int n, int[] info) {
int[] answer = {};
dfs(0, n, new int[11], info);
answer = min_array;
return answer;
}
static int[] min_array = {-1}; // ๋ผ์ด์ธ์ด ์ ํ์ด์ ํฉ ์ค ๋ผ์ด์ธ์ ์ ์๊ฐ ์ดํผ์น ์ ์๋ณด๋ค ๋ฎ๊ฑฐ๋ ๊ฐ์ผ๋ฉด [-1]
static int max_score = Integer.MIN_VALUE; // ๋ผ์ด์ธ์ด ์ ํ์ด์ ํฉ ์ค ์ดํผ์น ์ ์๋ณด๋ค ๋์ ๊ฒฝ์ฐ์๋ง ๊ฐฑ์
/**
* ๋ผ์ด์ธ์ด ์ดํผ์น๊ฐ ์ ํ์ด๋งํผ ํ์ด์ ์๊ณ , ์ดํผ์น๋ณด๋ค ์ ์๊ฐ ๋์ ๊ฒฝ์ฐ๋ค ์ค ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์๋ธ๋ค.
*
* @param level: ๋ผ์ด์ธ์ด ์ ํ์ด์ ๊ฐ์
* @param n: ์ดํผ์น๊ฐ ์ ํ์ด์ ์ด ๊ฐ์
* @param scores: ๋ผ์ด์ธ์ด ์ ํ์ด ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ ๋ฐฐ์ด
* @param info: ์ดํผ์น๊ฐ ์ ํ์ด ์ ๋ณด๋ฅผ ๋ณด๊ดํ๋ ๋ฐฐ์ด
*/
private static void dfs(int level, int n, int[] scores, int[] info) {
if (level == n) {
int total_score = 0; // ๋ผ์ด์ธ์ด ํ๋ํ ์ด ์ ์
int opposite_score = 0; // ์ดํผ์น๊ฐ ํ๋ํ ์ด ์ ์
for (int i = 0; i <= 10; i++) {
if (scores[i] > 0 || info[i] > 0) {
if (scores[i] > info[i]) total_score += 10 - i;
else opposite_score += 10 - i;
}
}
// ๋ผ์ด์ธ์ด ์ดํผ์น๋ณด๋ค ์ ์๋ฅด ๋ง์ด ํ๋ํ์ ๋ ์ด๊ธธ ์ ์๋ค.
// ๋ผ์ด์ธ์ด ์ดํผ์น๋ฅผ ์ด๊ธฐ๋ ๊ฒฝ์ฐ ์ค ์ ์ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
// ๋ผ์ด์ธ์ด ์ดํผ์น๋ฅผ ์ด๊ธฐ๋ ๊ฒฝ์ฐ ์ค ์ ์ ์ฐจ์ด๊ฐ ๋์ ์ผ ๊ฒฝ์ฐ, ๋ ๋ฎ์ ์ ์๋ฅผ ๋ง์ด ๋งํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
if (total_score > opposite_score && total_score - opposite_score >= max_score) {
// ๊ฐ์ฅ ๋ฎ์ ์ ์๋ฅผ ๋ ๋ง์ด ๋งํ ๊ฒฝ์ฐ๋ฅผ min_array์ ๋ฃ๊ธฐ
max_score = total_score - opposite_score;
min_array = scores.clone();
}
return;
}
for (int i = 0; i <= 10; i++) {
// ๋ผ์ด์ธ์ด ์ดํผ์น๋ฅผ ์ด๊ธฐ๊ธฐ ์ํด์ ๊ฐ์ ์ ์๋์์ ์ดํผ์น๋ณด๋ค 1๋ฐ ๋ ๋ง์ด ๋ง์ถ๋ฉด ๋๋ ๊ฒ์ด์ง
// 2๋ฐ ์ด์ ๋ ๋ง์ด ๋ง์ถ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณผ ํ์๋ ์๋ค.
// ์ฆ, ๊ฐ ์ ์๋์์ ์ดํผ์น๋ณด๋ค 1๋ฐ ๋ ๋ง์ด ๋ง์ถ์ด ์ ์๋ฅผ ํ๋ํ๊ณ
// ๋๋จธ์ง ๋จ์ ํ์๋ ๋ค๋ฅธ ์ ์๋๋ฅผ ๊ณต๋ตํ๋ ๊ฒ์ด ๋ ๋์ ์ ์๋ฅผ ํ๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
if(scores[i] > info[i]) break;
scores[i]++;
dfs(level + 1, n, scores, info);
scores[i]--;
}
}
}
๋ฌธ์ ๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/92342
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์๊ถ๋ํ
๋ฌธ์ ์ค๋ช ์นด์นด์ค๋ฐฐ ์๊ถ๋ํ๊ฐ ์ด๋ ธ์ต๋๋ค. ๋ผ์ด์ธ์ ์ ๋ฒ ์นด์นด์ค๋ฐฐ ์๊ถ๋ํ ์ฐ์น์์ด๊ณ ์ด๋ฒ ๋ํ์๋ ๊ฒฐ์น์ ๊น์ง ์ฌ๋ผ์์ต๋๋ค. ๊ฒฐ์น์ ์๋๋ ์ดํผ์น์ ๋๋ค. ์นด์นด์ค๋ฐฐ ์๊ถ๋ํ ์ด์์์
programmers.co.kr
'Algorithm > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kakao 2022 Blind Test - Lv3. ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ (Java) (0) | 2022.06.30 |
---|---|
Kakao 2022 Blind Test - Lv3. ์๊ณผ ๋๋ (Java) (0) | 2022.06.25 |
Kakao 2022 Blind Test - Lv2. k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (Java) (0) | 2022.06.04 |
Kakao 2021 Blind Test - Lv3. ๊ด๊ณ ์ฝ์ (Java) (0) | 2022.06.02 |
Kakao 2021 Blind Test - Lv3. ํฉ์น ํ์ ์๊ธ (Java) (0) | 2022.06.02 |
๋๊ธ