๋ฌธ์ ์ ๊ทผ
https://school.programmers.co.kr/learn/courses/15008/lessons/121684
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
์ต๋ ํ์์๊ฐ 10๋ช ์ด๊ณ ์ข ๋ชฉ์๋ ์ต๋ 10๊ฐ๊น์ง์ด๋ฏ๋ก ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ค๊ณ ํ๋ฉด
์ฒซ๋ฒ ์งธ ์ข ๋ชฉ์์ 10๋ช ์ค 1๋ช ์ ์ ํํ๊ณ ๋๋ฒ ์งธ ์ข ๋ชฉ์์ 9๋ช ์ค 1๋ช ์ ์ ํํ๊ณ ... ์ฆ, O(10!)์ด๋ฏ๋ก ์๊ฐ ์ด๊ณผ์์ด ๋ชจ๋ ๋ฅ๋ ฅ์น์ ํฉ์ด ์ต๋์ธ ๊ตฌ๊ฐ์ ๊ตฌํ ์ ์๋ค.
๊ทธ๋์ ๋ฐ๋ก ์์ ํ์์ผ๋ก ๋ฌธ์ ์ ์ ๊ทผํ์๋ค.
๋ฌธ์ ํ์ด
์์์ ๋งํ๋๋ก ๊ฐ ์ข ๋ชฉ๋น ํ์ฌ ๊ณ ๋ฅผ ์ ์๋ ์ธ์๋ค ๊ฐ๊ฐ์ ๋ํด ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ฉฐ ์ข ๋ชฉ๋ค์ ๋ชจ๋ ์ธ์์ด ์ฑ์์ก์ ๋์ sum ๊ฐ์ ๋น๊ตํ๋ฉฐ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
์ด๋ฅผ ์ํด ๋ฅ๋ ฅ์น ํฉ์ ์ต๋๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ max๋ณ์๋ฅผ ์ ์ธํ๊ณ ๊ฐ ์ ํ์ง์ ๋ฐ๋ผ ๋ ์ด์ ๊ณ ๋ฅผ ์ ์๋(์ด๋ฏธ ๋ค๋ฅธ ์ข ๋ชฉ์ ์ถ์ ์ ํ ๊ฒฝ์ฐ) ํ์๋ค์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ Set์ ์ ์ธํด์ฃผ์๋ค.
=> ์์๊ฐ ์ ์ง๋ ํ์๋ ์๊ณ ๋จ์ํ ๋ ์ด์ ๊ณ ๋ฅผ ์ ์๋(์ด๋ฏธ ๋ค๋ฅธ ์ข ๋ชฉ์ ํฌ์ ๋) ํ์๋ค์ ๋ฃ์๋ค๊ฐ ๋นผ๊ณ , contains ๋ฉ์๋๋ง ์ฌ์ฉํ๋ฉด ๋๋ฏ๋ก O(1)์ ์ด๊ฒ ๊ฐ๋ฅํ Set์ ์ฌ์ฉํ๋ค.
dfs๋ก์ง์์๋ cnt๋ฅผ ํตํด ํ์ฌ๊น์ง ๊ณ ๋ฅธ ์ข ๋ชฉ๋ค์ ์๋ฅผ ๋ํ๋ด๊ณ ์ด๊ฒ ability[0].length ์ฆ, ์ข ๋ชฉ์ ์์ ๊ฐ์์ง๋ฉด ๋ชจ๋ ์ข ๋ชฉ์ ์ธ์์ ๋ฐฐ์ ํ ๊ฒ์ด๋ฏ๋ก ๊ทธ๋์ sum(๋ชจ๋ ์ข ๋ชฉ์ ๋ฐฐ์ ๋ ํ์๋ค์ ๋ฅ๋ ฅ์น ํฉ)์ max์ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฒฝ์ฐ ๊ฐฑ์ ํด์ค๋ค.
๋ง์ฝ ์์ง ๋ชจ๋ ์ข
๋ชฉ์ ์ธ์์ด ์ฑ์์ง์ง ์์๋ค๋ฉด for๋ฌธ์ผ๋ก ๋ชจ๋ ํ์๋ค์ ์ดํด๋ณด๋ฉฐ banned๋ผ๋ Set์ ํด๋น ํ์์ด ํฌํจ๋์ด ์์ง ์๋ค๋ฉด ์์ง ์ด๋ ํ ์ข
๋ชฉ์๋ ๋ฐฐ์ ๋์ง ์์ ๊ฒ์ด๋ฏ๋ก banned์ ํด๋น ํ์์ ์ถ๊ฐํด์ฃผ๊ณ ์ฌ๊ท ํธ์ถ์ ํตํด ํ์ฌ ํ์์ด ์ด๋ฒ ์ข
๋ชฉ์ ์ฐธ์ฌํ๊ฒ ๋๋ ๊ฑธ๋ก ๊ฐ์ฃผํ๊ณ ๊ทธ ๋ค์ ์ฌ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํด๋๊ฐ๋ค.
(๋ค์ ์ข
๋ชฉ์ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๊ธฐ ์ํด cnt๋ฅผ +1 ํด์ฃผ์๊ณ , sum์ ํ์ฌ ํ์์ ์ด๋ฒ ์ข
๋ชฉ์ ๋ํ ๋ฅ๋ ฅ์น๋ฅผ ๋ํด์ฃผ๋ฉด์ ๋๊ฒจ์ฃผ์๋ค.)
=> ์ด ๋ banned์ ์ถ๊ฐํ๋ ํ์์ dfs ํธ์ถ์ด ๋๋ ํ ๋ค์ removeํด์ค์ผ ์ด๋ฒ ์ข ๋ชฉ์์ ๋ค๋ฅธ ํ์์ ๋ฐฐ์ ํ๋ ๊ฒฝ์ฐ๋ ์ ํํ๊ฒ ํ์์ด ๊ฐ๋ฅํ๋ค.
(๋ง์ฝ ์ด๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด ์์ง 2๋ฒํ์์ด ์ด๋ ํ ์ข ๋ชฉ์๋ ๋ฐฐ์ ๋์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๊ณ ์๋๋ฐ ์ด์ ์ 2๋ฒํ์์ ๋ฐฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ banned์ ๋ฐ์๋์ด ์์ด์ 2๋ฒ ํ์์ ๊ณ ๋ฅผ ์ ์๋ ์ํฉ์์๋ 2๋ฒ ํ์์ ์ ์ธํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๊ฒ๋จ)
์ด์ ์ด๋ ๊ฒ dfs๊ฐ ์ข ๋ฃ๋์๋ค๋ฉด max์๋ ๋ชจ๋ ์ข ๋ชฉ์ ๋ํด ๊ฐ ์ ์์ ๋ฅ๋ ฅ์น ํฉ์ด ์ต๋์ธ ์ ๋ต์ด ๋ค์ด์์ผ๋ฏ๋ก ์ด๋ฅผ ๋ฐํํด์ฃผ๋ฉด ๋๋๋ค.
์ ์ฒด ์ฝ๋
import java.util.*;
class Solution {
int max = Integer.MIN_VALUE;
void dfs(int cnt, int sum, int[][] ability, Set<Integer> banned) {
if (cnt == ability[0].length) {
if (max < sum) {
max = sum;
}
return;
}
// i๋ฒ ํ์์ cnt๋ฒ ์ข
๋ชฉ์ ๋ฐฐ์
for (int i = 0; i < ability.length; i++) {
if (!banned.contains(i)) {
banned.add(i);
dfs(cnt + 1, sum + ability[i][cnt], ability, banned);
banned.remove(i);
}
}
}
public int solution(int[][] ability) {
Set<Integer> banned = new HashSet<>();
// 0๋ฒ ์ข
๋ชฉ๋ถํฐ ๋ฐฐ์ ์์
dfs(0, 0, ability, banned);
return max;
}
}'๐ฅ Algorithm > ์์ ํ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ๋ผ์ง๋ ๋ฐํ (JAVA ํ์ด) (0) | 2025.10.28 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค] ์๊ณผ ๋๋ (JAVA ํ์ด) (0) | 2025.10.26 |
| [ํ๋ก๊ทธ๋๋จธ์ค] ์๊ถ๋ํ (JAVA ํ์ด) (0) | 2025.10.25 |