๐Ÿ’ป์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œํ’€์ด13

์ง€๋ฏผ์„œยท2023๋…„ 3์›” 14์ผ
0

coding test

๋ชฉ๋ก ๋ณด๊ธฐ
13/30

Chapter10. ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[๋ฌธ์ œ41] ๋“ฑ๊ตฃ๊ธธ - Level3

๊ณ„์†๋˜๋Š” ํญ์šฐ๋กœ ์ผ๋ถ€ ์ง€์—ญ์ด ๋ฌผ์— ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๋ฌผ์— ์ž ๊ธฐ์ง€ ์•Š์€ ์ง€์—ญ์„ ํ†ตํ•ด ํ•™๊ต๋ฅผ ๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์—์„œ ํ•™๊ต๊นŒ์ง€ ๊ฐ€๋Š” ๊ธธ์€ 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๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ง‘๊ณผ ํ•™๊ต๊ฐ€ ๋ฌผ์— ์ž ๊ธด ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

[์ฝ”๋“œ์ž‘์„ฑ]

1. DFS ํƒ์ƒ‰์„ ์ˆ˜ํ–‰(ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ)

def dfs(y, x, row, col, puddles):
	path = [[1, 0], [0, 1]]
    answer = 0

1-1. ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ 1์„ ๋ฐ˜ํ™˜

if [y, x] == [row - 1, col - 1]: return 1

1-2. ์˜ค๋ฅธ์ชฝ/์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰

for i in range(2):
	ny = y + path[i][0]
    nx = x + path[i][0]
    
    if 0 <= ny < row and 0 <= nx < col:
    	if [nx + 1, ny + 1] in puddles: continue
        answer += dfs(ny, nx, row, col, puddles)

1-3. ์ •๋‹ต์„ 1,000,000,007๋กœ ๋‚˜๋ˆˆ๋‹ค.

return answer % 1000000007

2. ์ฒซ dfs() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜

def solution(m, n, puddles):
	return dfs(0, 0, n, m, puddles)

[์ „์ฒด์ฝ”๋“œ]

def dfs(y, x, row, col, puddles):
	path = [[1, 0], [0, 1]]
    answer = 0
    
    if [y, x] == [row - 1, col - 1]: return 1
    
    for i in range(2):
		ny = y + path[i][0]
    	nx = x + path[i][0]
    
    	if 0 <= ny < row and 0 <= nx < col:
    		if [nx + 1, ny + 1] in puddles: continue
        	answer += dfs(ny, nx, row, col, puddles)
        
   return answer % 1000000007
   
def solution(m, n, puddles):
	return dfs(0, 0, n, m, puddles)
profile
๐Ÿ’ป + ๐ŸŽฅ

0๊ฐœ์˜ ๋Œ“๊ธ€