-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์ ์ ์ผ๊ฐํAlgo Rhythm๐บ๐/Programmers 2020. 8. 4. 15:40
๐ ๋ฌธ์ ์ค๋ช
์์ ๊ฐ์ ์ผ๊ฐํ์ ๊ผญ๋๊ธฐ์์ ๋ฐ๋ฅ๊น์ง ์ด์ด์ง๋ ๊ฒฝ๋ก ์ค, ๊ฑฐ์ณ๊ฐ ์ซ์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์๋ณด๋ ค๊ณ ํฉ๋๋ค. ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋๋ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ค๋ฅธ์ชฝ ๋๋ ์ผ์ชฝ์ผ๋ก๋ง ์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด 3์์๋ ๊ทธ ์๋์นธ์ 8 ๋๋ 1๋ก๋ง ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
์ผ๊ฐํ์ ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด triangle์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฑฐ์ณ๊ฐ ์ซ์์ ์ต๋๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- ์ผ๊ฐํ์ ๋์ด๋ 1 ์ด์ 500 ์ดํ์ ๋๋ค.
- ์ผ๊ฐํ์ ์ด๋ฃจ๊ณ ์๋ ์ซ์๋ 0 ์ด์ 9,999 ์ดํ์ ์ ์์ ๋๋ค.
๐ฏ ์ด๋ป๊ฒ ํ์๋
1. DFS (50/ 100) - ํจ์จ์ฑ ํต๊ณผ ๐ โ๏ธ๐ โ๏ธ๐
class Solution { public int solution(int[][] triangle) { return dfs(triangle, 0, 0, triangle[0][0]); } public int dfs(int[][] arr, int lev, int idx, int sum) { if(lev == arr.length - 1) return sum; return Math.max(dfs(arr, lev + 1, idx, sum + arr[lev + 1][idx]) //left ,dfs(arr, lev + 1, idx + 1, sum + arr[lev + 1][idx + 1])); // right } }
2. DP - ๋ชจ๋ ํต๊ณผ ๐ป๐บ๐ธ
class Solution { public int solution(int[][] triangle) { int answer = Integer.MIN_VALUE; int len = triangle.length; for(int i = 0; i < triangle.length; i++) { if(i == 0) continue; int n = triangle[i].length; for(int j = 0; j < n; j++) { int lParent = j - 1; int rParent = j; if(j == 0) { //์ผ์ชฝ ๋ triangle[i][j] += triangle[i-1][rParent]; continue; } if(j == n - 1) { //์ค๋ฅธ์ชฝ ๋ triangle[i][j] += triangle[i-1][lParent]; continue; } triangle[i][j] += Math.max(triangle[i-1][lParent] ,triangle[i-1][rParent]); } } for(int i = 0; i < triangle[len-1].length; i++) { answer = Math.max(answer, triangle[len-1][i]); } return answer; } }
๐ง ์ ์ ๋ ๊ฒ ํ์๋
1. DFS (50/ 100) - ํจ์จ์ฑ ํต๊ณผ ๐ โ๏ธ๐ โ๏ธ๐
DFS๋ฅผ ํตํ ์ ๊ทผ์ ๊ฐ๋จํ๋ค. ์ผ๊ฐํ ๊ผญ๋๊ธฐ๋ถํฐ ๋ฐ๋ฅ๊น์ง ์ญ ๋ด๋ ค๊ฐ๊ณ ๋ฐ๋ฅ์ ๋๋ฌํ๋ฉด ๊ณ์ฐ๋ ๊ฐ์ return ํ๋ค.
์ด๋ ํ์ฌ ๋ ๋ฒจ์์ ๋ค์ ๋ ๋ฒจ๋ก ์ด๋ํ ๋๋ ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ์ด๋ํ ์ ์๋ค. ํ์ฌ ๋ ๋ฒจ์ ์ฃผ๋ชฉํ๊ณ ์๋ ๊ฐ์ index๊ฐ x๋ผ๋ฉด ๋ค์ ๋ ๋ฒจ์ ์ผ์ชฝ์ index๋ x, ์ค๋ฅธ์ชฝ์ index๋ x + 1์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํตํด ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ ์๋๋ก ๋ด๋ ค๊ฐ๋ ๊ฒ์ ํํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ์ผ๋ก ๊ฐ ๋์ ํฉ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ ๋์ ํฉ ์ค ๋ ํฐ ๊ฐ์ returnํ๋ค.
2. DP - ๋ชจ๋ ํต๊ณผ ๐ป๐บ๐ธ
DFS๋ฅผ ํตํ ๋ฐฉ๋ฒ์ ์ ํํ๋ ํจ์จ์ ์ด์ง ์๋ค. ์๋ํ๋ฉด ํ์์๋ ๊ณ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์๋์ ๊ฐ์ ์ ์ ์ผ๊ฐํ์ด ์๋ค๊ณ ๊ฐ์ ํ์. ๋นจ๊ฐ์ ์์ด ๊ทธ๋ ค์ง 1๊น์ง ๋๋ฌํ๊ธฐ ์ํด์๋ ๋ ๊ฐ์ ๊ฒฝ๋ก๊ฐ ์๋ค. ์ฒซ๋ฒ์งธ ๊ฒฝ๋ก๋ 7 -> 3 -> 1๋ก ์ด์ด์ง๊ณ ํฉ์ 11์ด๋ค. ๋๋ฒ์งธ ๊ฒฝ๋ก๋ 7 -> 8 -> 1๋ก ์ด์ด์ง๊ณ ํฉ์ 16์ด๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ 1์ ๊ฐ ๋๋ ๋๋ฒ์งธ ๊ฒฝ๋ก๋ก ๊ฐ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฅผ ์ํด ๋ ธ๋๊ฐ ์ผ์ชฝ ๋์ด๋ ์ค๋ฅธ์ชฝ ๋์ด ์๋๋ผ๋ฉด ์ผ์ชฝ์ผ๋ก๋ถํฐ ๋ด๋ ค์ค๋ ๊ฒฝ๋ก์ ์ค๋ฅธ์ชฝ์ผ๋ก๋ถํฐ ๋ด๋ ค์ค๋ ๊ฒฝ๋ก ์ค ํฉ์ด ๋ ํฐ ๊ฒฝ๋ก๋ก๋ถํฐ ๋ด๋ ค์จ๋ค๊ณ ํ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๐ ๋ฌด์์ ๋ฐฐ์ ๋
ํ์์๊ฑฐ๋ ์ค๋ณต๋๋ ๊ณ์ฐ์ ํผํ๋ ๊ฒ์ด DP์ ๋ณธ์ง์ด๋ค!
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ