-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ๋ฑ๊ตฃ๊ธธAlgo Rhythm๐บ๐/Programmers 2020. 8. 6. 15:21
๐ ๋ฌธ์ ์ค๋ช
๊ณ์๋๋ ํญ์ฐ๋ก ์ผ๋ถ ์ง์ญ์ด ๋ฌผ์ ์ ๊ฒผ์ต๋๋ค. ๋ฌผ์ ์ ๊ธฐ์ง ์์ ์ง์ญ์ ํตํด ํ๊ต๋ฅผ ๊ฐ๋ ค๊ณ ํฉ๋๋ค. ์ง์์ ํ๊ต๊น์ง ๊ฐ๋ ๊ธธ์ m x n ํฌ๊ธฐ์ ๊ฒฉ์๋ชจ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์๋ ๊ทธ๋ฆผ์ m = 4, n = 3 ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
๊ฐ์ฅ ์ผ์ชฝ ์, ์ฆ ์ง์ด ์๋ ๊ณณ์ ์ขํ๋ (1, 1)๋ก ๋ํ๋ด๊ณ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋, ์ฆ ํ๊ต๊ฐ ์๋ ๊ณณ์ ์ขํ๋ (m, n)์ผ๋ก ๋ํ๋ ๋๋ค.
๊ฒฉ์์ ํฌ๊ธฐ m, n๊ณผ ๋ฌผ์ด ์ ๊ธด ์ง์ญ์ ์ขํ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด puddles์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ง์์ ํ๊ต๊น์ง ๊ฐ ์ ์๋ ์ต๋จ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ 1,000,000,007๋ก ๋๋ ๋๋จธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
-
๊ฒฉ์์ ํฌ๊ธฐ m, n์ 1 ์ด์ 100 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
-
m๊ณผ n์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
-
๋ฌผ์ ์ ๊ธด ์ง์ญ์ 0๊ฐ ์ด์ 10๊ฐ ์ดํ์ ๋๋ค.
-
์ง๊ณผ ํ๊ต๊ฐ ๋ฌผ์ ์ ๊ธด ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
๐ฏ ์ด๋ป๊ฒ ํ์๋
์ฒซ๋ฒ์งธ ์๋ (50/ 100) - ํจ์จ์ฑ ํต๊ณผ๐ ๐ โ๏ธ๐ โ๏ธ
class Solution { private static final boolean PUDDLE = true; public int solution(int m, int n, int[][] puddles) { int answer = 0; long[][] route = new long[m + 1][n + 1]; // default : 0 boolean[][] map = new boolean[m + 1][n + 1]; // default : false // init map for(int i = 0; i < puddles.length; i++) { int x = puddles[i][0]; int y = puddles[i][1]; map[x][y] = PUDDLE; } for(int i = 1; i < route.length; i++) { for(int j = 1; j < route[i].length; j++) { if(i == 1 && j == 1) { route[i][j] = 1; continue; } if(map[i][j] == PUDDLE) continue; route[i][j] = route[i - 1][j] + route[i][j - 1]; // from left + from top } } answer = (int)(route[m][n] % 1000000007); return answer; } }
์ต์ข ์ฝ๋
class Solution { private static final int PUDDLE = -1; public int solution(int m, int n, int[][] puddles) { int answer = 0; int[][] map = new int[m + 1][n + 1]; // default : 0 // init map for(int i = 0; i < puddles.length; i++) { int x = puddles[i][0]; int y = puddles[i][1]; map[x][y] = PUDDLE; } for(int i = 1; i < map.length; i++) { for(int j = 1; j < map[i].length; j++) { if(i == 1 && j == 1) { map[i][j] = 1; continue; } if(map[i][j] == PUDDLE) { map[i][j] = 0; continue; } map[i][j] = (map[i - 1][j] + map[i][j - 1]) % 1000000007; // from left + from top } } answer = map[m][n]; return answer; } }
๐ง ์ ์ ๋ ๊ฒ ํ์๋
์ฒซ๋ฒ์งธ ์๋ (50/ 100) - ํจ์จ์ฑ ํต๊ณผ๐ ๐ โ๏ธ๐ โ๏ธ
์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ๋ฐฐ๊ฒฝ์ง์์ด ํ์ํ๋ค.
๋จผ์ Top left๋ก๋ถํฐ bottom right๊น์ง ์ต๋จ ๊ฒฝ๋ก์ ๊ฐ์๋ฅผ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต๋จ ๊ฒฝ๋ก๋ก ์ด๋ํ๊ธฐ ์ํด์๋ ์๋, ์ค๋ฅธ์ชฝ ์ด๋๋ง ํด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋, ์ค๋ฅธ์ชฝ ์ด๋๋ง ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์ง์ญ์ ๋๋ฌํ๊ธฐ ๊น์ง์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฐ์๋ (์ ์ง์ญ์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฐ์) + (์ผ์ชฝ ์ง์ญ์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฐ์)์ด๋ค. ํ์ง๋ง ๋ง์ฝ ๊ทธ ์ง์ญ์ด ๋ฌผ์ ๋ฉ์ด๋ผ๋ฉด ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํ์ง ์๊ณ 0์ผ๋ก ๋์ด์ผ ํ๋ค.
์์ ๊ฐ์ ๋ฐฐ๊ฒฝ์ง์์ ์ด์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ๊ฒฐ๊ณผ๋ ํจ์จ์ฑ ์คํจ์๋ค...๐
์ต์ข ์ฝ๋
์๋ฌด๋ฆฌ ์๊ฐํด๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐํจ์ ์์๋ค. ๊ทธ๋์ ์ง๋ฌธํ๊ธฐ๋ฅผ ๋ดค๋๋ฐ overflow๊ฐ ์ ์๊ธฐ๋๋ก modulo ์ฐ์ฐ์ ๋ฏธ๋ฆฌ ํ๋ฉด ํต๊ณผํ๋ค๊ณ ํ๋ค. ๊ทธ๋์ ๊ทธ ๋ฐฉ๋ฒ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํต๊ณผํ๋ค๐
๐ ๋ฌด์์ ๋ฐฐ์ ๋
Type์ ๋ฒ์์ ๊ดํด์ ๋ ๊ณ ๋ คํ๋ ์ต๊ด์ ๊ฐ์ง์!
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค - ์ซ์ ๊ฒ์ (0) 2022.09.24 [Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ๋๋์ง (0) 2020.08.08 [Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์ ์ ์ผ๊ฐํ (0) 2020.08.04 [Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์์ฐ (0) 2020.07.30 [Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์์ (0) 2020.07.29 -