2021. 1. 21. 22:18ใ๐ Algorithm/๐ช๐ป Python ๋ฌธ์ ํ์ด
๋ฌธ์ ์ค๋ช
ROR ๊ฒ์์ ๋ ํ์ผ๋ก ๋๋์ด์ ์งํํ๋ฉฐ, ์๋ ํ ์ง์์ ๋จผ์ ํ๊ดดํ๋ฉด ์ด๊ธฐ๋ ๊ฒ์์ ๋๋ค. ๋ฐ๋ผ์, ๊ฐ ํ์ ์๋ ํ ์ง์์ ์ต๋ํ ๋นจ๋ฆฌ ๋์ฐฉํ๋ ๊ฒ์ด ์ ๋ฆฌํฉ๋๋ค.
์ง๊ธ๋ถํฐ ๋น์ ์ ํ ํ์ ํ์์ด ๋์ด ๊ฒ์์ ์งํํ๋ ค๊ณ ํฉ๋๋ค. ๋ค์์ 5 x 5 ํฌ๊ธฐ์ ๋งต์, ๋น์ ์ ์บ๋ฆญํฐ๊ฐ (ํ: 1, ์ด: 1) ์์น์ ์๊ณ , ์๋ ํ ์ง์์ (ํ: 5, ์ด: 5) ์์น์ ์๋ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ ๊ทธ๋ฆผ์์ ๊ฒ์์ ๋ถ๋ถ์ ๋ฒฝ์ผ๋ก ๋งํ์์ด ๊ฐ ์ ์๋ ๊ธธ์ด๋ฉฐ, ํฐ์ ๋ถ๋ถ์ ๊ฐ ์ ์๋ ๊ธธ์
๋๋ค. ์บ๋ฆญํฐ๊ฐ ์์ง์ผ ๋๋ ๋, ์, ๋จ, ๋ถ ๋ฐฉํฅ์ผ๋ก ํ ์นธ์ฉ ์ด๋ํ๋ฉฐ, ๊ฒ์ ๋งต์ ๋ฒ์ด๋ ๊ธธ์ ๊ฐ ์ ์์ต๋๋ค.
์๋ ์์๋ ์บ๋ฆญํฐ๊ฐ ์๋ ํ ์ง์์ผ๋ก ๊ฐ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํ๋ด๊ณ ์์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ 11๊ฐ์ ์นธ์ ์ง๋์ ์๋ ํ ์ง์์ ๋์ฐฉํ์ต๋๋ค.
- ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ 15๊ฐ์ ์นธ์ ์ง๋์ ์๋ํ ์ง์์ ๋์ฐฉํ์ต๋๋ค.
์ ์์์์๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ๋ณด๋ค ๋ ๋น ๋ฅด๊ฒ ์๋ํ ์ง์์ ๋์ฐฉํ๋ ๋ฐฉ๋ฒ์ ์์ผ๋ฏ๋ก, ์ด ๋ฐฉ๋ฒ์ด ์๋ ํ ์ง์์ผ๋ก ๊ฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ง์ฝ, ์๋ ํ์ด ์์ ์ ํ ์ง์ ์ฃผ์์ ๋ฒฝ์ ์ธ์๋์๋ค๋ฉด ์๋ ํ ์ง์์ ๋์ฐฉํ์ง ๋ชปํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋น์ ์ ์บ๋ฆญํฐ๋ ์๋ ํ ์ง์์ ๋์ฐฉํ ์ ์์ต๋๋ค.
๊ฒ์ ๋งต์ ์ํ maps๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์บ๋ฆญํฐ๊ฐ ์๋ ํ ์ง์์ ๋์ฐฉํ๊ธฐ ์ํด์ ์ง๋๊ฐ์ผ ํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋จ, ์๋ ํ ์ง์์ ๋์ฐฉํ ์ ์์ ๋๋ -1์ return ํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- maps๋ n x m ํฌ๊ธฐ์ ๊ฒ์ ๋งต์ ์ํ๊ฐ ๋ค์ด์๋ 2์ฐจ์ ๋ฐฐ์ด๋ก, n๊ณผ m์ ๊ฐ๊ฐ 1 ์ด์ 100 ์ดํ์ ์์ฐ์์
๋๋ค.
- n๊ณผ m์ ์๋ก ๊ฐ์ ์๋, ๋ค๋ฅผ ์๋ ์์ง๋ง, n๊ณผ m์ด ๋ชจ๋ 1์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- maps๋ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, 0์ ๋ฒฝ์ด ์๋ ์๋ฆฌ, 1์ ๋ฒฝ์ด ์๋ ์๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค.
- ์ฒ์์ ์บ๋ฆญํฐ๋ ๊ฒ์ ๋งต์ ์ข์ธก ์๋จ์ธ (1, 1) ์์น์ ์์ผ๋ฉฐ, ์๋๋ฐฉ ์ง์์ ๊ฒ์ ๋งต์ ์ฐ์ธก ํ๋จ์ธ (n, m) ์์น์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์์
ํ์ด ๊ณผ์
0,0 ๋ถํฐ row-1, col -1 ๊น์ง ๊ฐ์์๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ฏ๋ก bfs ๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
queue์ 0,0 ๋ถํฐ ์์๋ฅผ ๋ฃ์ด ๊ฒ์ฌํ๋ ๋ฐ ์ํ์ข์ฐ ์ด๋ํ new_x์ new_y ์ ์ขํ๊ฐ 0๊ณผ ROW, COL ์ฌ์ด์ ์๋์ง ํ์ธํ๋ฉฐ
maps[ new_x ] [ new_y ]๊ฐ 1์ธ ๊ฒ๋ง queue์ ๋ฃ์ด์ฃผ๊ณ count๋ฅผ +1 ํด์ฃผ๋ ํ์์ผ๋ก while๋ฌธ์ ๊ตฌํํ์๊ณ
๋ง์ฝ queue๋ฅผ ๋ชจ๋ ์ฒดํฌํ์์ง๋ง ROW-1, COL-1์ ์ง๋์ง ์๋๋ค๋ฉด ์ง์์ ๊ฐ ์ ์๋ ๊ฒ์ด๋ฏ๋ก return -1 ํด์ฃผ๋๋ก ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
from collections import deque
def solution(maps):
answer = 0
ROW = len(maps)
COL = len(maps[0])
check_maps = [[False for _ in range(COL)] for _ in range(ROW)]
def available(x, y):
return 0 <= x < ROW and 0 <= y < COL
def bfs(x,y):
count = 1
dxy = [(-1, 0), (1, 0), (0, 1), (0, -1)]
queue = deque([[x,y,count]])
check_maps[x][y] = True
while queue:
x, y, count = queue.popleft()
if x == ROW -1 and y == COL -1 :
return count
for dx, dy in dxy:
new_x , new_y = x + dx , y + dy
if available(new_x,new_y) and not check_maps[new_x][new_y]:
if maps[new_x][new_y] == 1:
queue.append([new_x, new_y , count+1])
check_maps[new_x][new_y] = True
return -1
return bfs(0,0)
'๐ Algorithm > ๐ช๐ป Python ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level2] ์นดํซ (0) | 2021.01.21 |
---|---|
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level2] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (0) | 2021.01.19 |
[Python - ํ๋ก๊ทธ๋๋จธ์ค Level2] ์ฃผ์ ๊ฐ๊ฒฉ (0) | 2021.01.19 |