๐ค๋ฌธ์ ํด๊ฒฐ
1. visited = {} ํ์ฌ์์น x, y, ํ์ฌ์์น์์ ๋ฐ๋ก๋ณด๊ณ ์๋ ๋ฐฉํฅ ์ ํค๊ฐ์ผ๋ก, ํ์ฌ์์น๊น์ง ์ค๋๋ฐ ๋๋ ๋น์ฉ์ ๋ฒจ๋ฅ๊ฐ์ผ๋ก ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ ๋ค. ( 0, 1, 2, 3 | ์ ํ ์ข ์ฐ )
2. q = deque() visited์ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๊ณ BFS๋ฅผ ์คํํ๊ธฐ ์ํด ์ฌ์ฉ.
( ์์น x,y, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ k, ๋น์ฉ )
3. BFS๋ฅผ ๋๋ฉฐ ํ์ฌ ๋ฐฉํฅ d ์ ์์ผ๋ก์ ๋ฐฉํฅ k๋ฅผ ๋น๊ตํ์ฌ ๋๋ก๊ฑด์ค ๋น์ฉ์ ์ฑ ์ ํ๋ค.
4. ๋์ ๋๋ฌํ์ ๋ ์ต์๋น์ฉ์ ์ถ๋ ฅํ๋ค.
( ๋์ ๋๋ฌํ๋ ๊ฒฝ์ฐ๊ฐ ์ฌ๋ฌ๋ฒ์ด๋ฏ๋ก ๋๋ ๋ ๊น์ง ๋น๊ตํด์ค๋ค. )
๐จ ๋๋ฌด ์ด๋ ค์ ๋ ๋ฌธ์ ... ๋ช์๊ฐ๋์ ํผ๊ฑฐ๊ฐ๋ค. ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์ฅํ๊ณ ๋น๊ตํ๋๊ฒ ์ค์!!
๐ป์์ค ์ฝ๋
from collections import deque
def solution(board):
answer = 0
answer = 999999
q = deque()
q.append((0, 0, 4, 0))
visited = {
(0, 0, 1): 0, # (x, y, ํ์ฌ์์น(x, y)์์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๋ฐฉํฅ): ํ์ฌ์์น๊น์ง ์ค๋๋ฐ ๋๋ ๋น์ฉ
(0, 0, 3): 0, # 0, 1, 2, 3 | ์ ํ ์ข ์ฐ
}
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
while q:
x, y, d, c = q.popleft()
# ๋ง์ง๋ง์ ๋๋ฌ ํ์ ๋ ์ต์๊ฐ์ ๊ฒฐ๊ณผ์ ๋ฃ๋๋ค.
if x == len(board) - 1 and y == len(board) - 1:
answer = min(answer, c)
for k in range(len(dx)):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < len(board) and 0 <= ny < len(board) and board[nx][ny] == 0:
nc = c
if d == 4: # ๋งจ์ฒ์์ ์ด๋๋ฐฉํฅ์ผ๋ก๋ ์ฌ ์ ์์ผ๋ฏ๋ก ์ง์ ๋๋ก ํ๋ค.
nc += 100
elif d <= 1 and k <= 1: # ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ๊ณผ ์งํ ๋ฐฉํฅ์ด ์ธ๋ก์ผ ๋
nc += 100
elif d >= 2 and k >= 2: # ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ๊ณผ ์งํ ๋ฐฉํฅ์ด ๊ฐ๋ก์ผ ๋
nc += 100
else: # ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ๊ณผ ์งํ ๋ฐฉํฅ์ด ์๋ก ๋ค๋ฅผ ๋ | ์ฝ๋์ ์ง์ ์ด ์๊ธฐ๋ฏ๋ก 600์
nc += 500 + 100
# ๋ฐฉ๋ฌธํ ์ ์ด ์๊ฑฐ๋, ๋ฐฉ๋ฌธํ ์ ์ด ์์ด๋ ๊ธฐ์กด์ ๋น์ฉ๋ณด๋ค ์ง๊ธ ์จ ๊ฒฝ๋ก์ ๋น์ฉ(nc))๊ฐ ์ ๋ค๋ฉด
if not visited.get((nx, ny, k)) or visited[(nx, ny, k)] > nc:
visited[(nx, ny, k)] = nc # ๋ฐฐ์ด์ ์ถ๊ฐํ๊ฑฐ๋, nc๋ฅผ ๊ฐฑ์ ํด ์ค๋ค.
q.append((nx, ny, k, nc)) # ๋ค์ ์ถ๋ฐ ์ง๋ฅผ q์ ๋ฃ์ด์ค๋ค.
return answer
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/67259
๋ฌธ์ ์ค๋ช
๊ฑด์คํ์ฌ์ ์ค๊ณ์ฌ์ธ ์ฃ ๋ฅด๋๋ ๊ณ ๊ฐ์ฌ๋ก๋ถํฐ ์๋์ฐจ ๊ฒฝ์ฃผ๋ก ๊ฑด์ค์ ํ์ํ ๊ฒฌ์ ์ ์๋ขฐ๋ฐ์์ต๋๋ค.
์ ๊ณต๋ ๊ฒฝ์ฃผ๋ก ์ค๊ณ ๋๋ฉด์ ๋ฐ๋ฅด๋ฉด ๊ฒฝ์ฃผ๋ก ๋ถ์ง๋ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ฒฉ์ ํํ์ด๋ฉฐ ๊ฐ ๊ฒฉ์๋ 1 x 1 ํฌ๊ธฐ์
๋๋ค.
์ค๊ณ ๋๋ฉด์๋ ๊ฐ ๊ฒฉ์์ ์นธ์ 0 ๋๋ 1 ๋ก ์ฑ์์ ธ ์์ผ๋ฉฐ, 0์ ์นธ์ด ๋น์ด ์์์ 1์ ํด๋น ์นธ์ด ๋ฒฝ์ผ๋ก ์ฑ์์ ธ ์์์ ๋ํ๋
๋๋ค.
๊ฒฝ์ฃผ๋ก์ ์ถ๋ฐ์ ์ (0, 0) ์นธ(์ข์ธก ์๋จ)์ด๋ฉฐ, ๋์ฐฉ์ ์ (N-1, N-1) ์นธ(์ฐ์ธก ํ๋จ)์
๋๋ค. ์ฃ ๋ฅด๋๋ ์ถ๋ฐ์ ์ธ (0, 0) ์นธ์์ ์ถ๋ฐํ ์๋์ฐจ๊ฐ ๋์ฐฉ์ ์ธ (N-1, N-1) ์นธ๊น์ง ๋ฌด์ฌํ ๋๋ฌํ ์ ์๊ฒ ์ค๊ฐ์ ๋๊ธฐ์ง ์๋๋ก ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํด์ผ ํฉ๋๋ค.
๊ฒฝ์ฃผ๋ก๋ ์, ํ, ์ข, ์ฐ๋ก ์ธ์ ํ ๋ ๋น ์นธ์ ์ฐ๊ฒฐํ์ฌ ๊ฑด์คํ ์ ์์ผ๋ฉฐ, ๋ฒฝ์ด ์๋ ์นธ์๋ ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ ์ ์์ต๋๋ค.
์ด๋, ์ธ์ ํ ๋ ๋น ์นธ์ ์ํ ๋๋ ์ข์ฐ๋ก ์ฐ๊ฒฐํ ๊ฒฝ์ฃผ๋ก๋ฅผ ์ง์ ๋๋ก ๋ผ๊ณ ํฉ๋๋ค.
๋ํ ๋ ์ง์ ๋๋ก๊ฐ ์๋ก ์ง๊ฐ์ผ๋ก ๋ง๋๋ ์ง์ ์ ์ฝ๋ ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ฑด์ค ๋น์ฉ์ ๊ณ์ฐํด ๋ณด๋ ์ง์ ๋๋ก ํ๋๋ฅผ ๋ง๋ค ๋๋ 100์์ด ์์๋๋ฉฐ, ์ฝ๋๋ฅผ ํ๋ ๋ง๋ค ๋๋ 500์์ด ์ถ๊ฐ๋ก ๋ญ๋๋ค.
์ฃ ๋ฅด๋๋ ๊ฒฌ์ ์ ์์ฑ์ ์ํด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ ๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๊ทธ๋ฆผ์ ์ง์ ๋๋ก 6๊ฐ์ ์ฝ๋ 4๊ฐ๋ก ๊ตฌ์ฑ๋ ์์์ ๊ฒฝ์ฃผ๋ก ์์์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 6 x 100 + 4 x 500 = 2600์ ์ ๋๋ค.
๋ ๋ค๋ฅธ ์๋ก, ์๋ ๊ทธ๋ฆผ์ ์ง์ ๋๋ก 4๊ฐ์ ์ฝ๋ 1๊ฐ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฃผ๋ก์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 4 x 100 + 1 x 500 = 900์ ์ ๋๋ค.
๋๋ฉด์ ์ํ(0์ ๋น์ด ์์, 1์ ๋ฒฝ)์ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด board๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
[์ ํ์ฌํญ]
- board๋ 2์ฐจ์ ์ ์ฌ๊ฐ ๋ฐฐ์ด๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 3 ์ด์ 25 ์ดํ์ ๋๋ค.
- board ๋ฐฐ์ด์ ๊ฐ ์์์ ๊ฐ์ 0 ๋๋ 1 ์
๋๋ค.
- ๋๋ฉด์ ๊ฐ์ฅ ์ผ์ชฝ ์๋จ ์ขํ๋ (0, 0)์ด๋ฉฐ, ๊ฐ์ฅ ์ฐ์ธก ํ๋จ ์ขํ๋ (N-1, N-1) ์ ๋๋ค.
- ์์์ ๊ฐ 0์ ์นธ์ด ๋น์ด ์์ด ๋๋ก ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํจ์ 1์ ์นธ์ด ๋ฒฝ์ผ๋ก ์ฑ์์ ธ ์์ด ๋๋ก ์ฐ๊ฒฐ์ด ๋ถ๊ฐ๋ฅํจ์ ๋ํ๋ ๋๋ค.
- board๋ ํญ์ ์ถ๋ฐ์ ์์ ๋์ฐฉ์ ๊น์ง ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ ์ ์๋ ํํ๋ก ์ฃผ์ด์ง๋๋ค.
- ์ถ๋ฐ์ ๊ณผ ๋์ฐฉ์ ์นธ์ ์์์ ๊ฐ์ ํญ์ 0์ผ๋ก ์ฃผ์ด์ง๋๋ค.
์ ์ถ๋ ฅ ์
boardresult
[[0,0,0],[0,0,0],[0,0,0]] | 900 |
[[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] | 3800 |
[[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] | 2100 |
[[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[0,1,0,0,0,1],[0,0,0,0,0,0]] | 3200 |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ณธ๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
์์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์ ๋๋ก 18๊ฐ, ์ฝ๋ 4๊ฐ๋ก ์ด 3800์์ด ๋ญ๋๋ค.
์ ์ถ๋ ฅ ์ #3
์์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์ ๋๋ก 6๊ฐ, ์ฝ๋ 3๊ฐ๋ก ์ด 2100์์ด ๋ญ๋๋ค.
์ ์ถ๋ ฅ ์ #4
๋ถ์์ ๊ฒฝ๋ก์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์ ๋๋ก 12๊ฐ, ์ฝ๋ 4๊ฐ๋ก ์ด 3200์์ด ๋ญ๋๋ค.
๋ง์ฝ, ํ๋์ ๊ฒฝ๋ก์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ค๋ฉด ์ง์ ๋๋ก 10๊ฐ, ์ฝ๋ 5๊ฐ๋ก ์ด 3500์์ด ๋ค๋ฉฐ, ๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋ธ๋ก ์ด๋ํ๊ธฐ(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.09.01 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ฌ ๊ฒ์(2020 KAKAO BLIND RECRUITMENT) (0) | 2020.08.31 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์๋ฌผ์ ์ ์ด์ (2020 KAKAO BLIND RECRUITMENT) (2) | 2020.08.29 |
[python] ๋ฐฑ์ค - 1309. ๋๋ฌผ์ (0) | 2020.08.28 |
[python] ๋ฐฑ์ค - 1992. ์ฟผ๋ํธ๋ฆฌ (0) | 2020.08.27 |