[๋ฐฑ์ค€๐Ÿ…5] 14503 - ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ (Python)

eziยท2024๋…„ 6์›” 21์ผ

Review

์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ๊ณผ ํ›„์ง„์„ ์ƒ๊ฐํ•ด ๋‚ด๋Š”๋ฐ ๊ฝค ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค ..
๋ฐฉํ–ฅ์ด ์žˆ๊ธฐ์— bfs๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ๊นŒ์ง€๊ฐ€ ๋‚ด ์‹ค๋ ฅ์ด์—ˆ๋‹จ ๊ฑธ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋А๊ผˆ๋‹ค.

โœจ HOW? ์‹œ๊ณ„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ turn

(d + 3 ) % 4

โœจ HOW? ํ›„์ง„

nx = x - dx[d] 
ny = y - dy[d]

Code

# 240620
'''
๋ฐฉ n*m, ๋ฒฝ ๋˜๋Š” ๋นˆ์นธ, ์ฒญ์†Œ๊ธฐ๋Š” ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด ์žˆ์Œ 

$0$์ธ ๊ฒฝ์šฐ ๋ถ์ชฝ, 
$1$์ธ ๊ฒฝ์šฐ ๋™์ชฝ, 
$2$์ธ ๊ฒฝ์šฐ ๋‚จ์ชฝ, 
$3$์ธ ๊ฒฝ์šฐ ์„œ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

1. ํ˜„์žฌ ์นธ์ด ์•„์ง ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ˜„์žฌ ์นธ์„ ์ฒญ์†Œํ•œ๋‹ค.
2. ํ˜„์žฌ ์นธ์˜ ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ด ์—†๋Š” ๊ฒฝ์šฐ,
    1. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•œ ์นธ ํ›„์ง„ํ•˜๊ณ  1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    2. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์˜ ๋’ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
3. ํ˜„์žฌ ์นธ์˜ ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ,
    1. ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ๋‹ค.
    2. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์•ž์ชฝ ์นธ์ด ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ธ ๊ฒฝ์šฐ ํ•œ ์นธ ์ „์ง„ํ•œ๋‹ค.
    3. 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
'''

from collections import deque

n, m = map(int, input().split())
r, c, d = map(int, input().split())
graph = []

for _ in range(n):
    graph.append(list(map(int, input().split())))

visited = [[False] * m for _ in range(n)]
visited[r][c] = 1
cnt = 1

'''์‹œ๊ณ„ ๋ฐฉํ–ฅ'''
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

queue = deque()
queue.append((r,c))

while queue:    
    flag = False
    x, y = queue.popleft()
    
    for _ in range(4):
        d = ( d + 3 ) % 4
        nx = x + dx[d]
        ny = y + dy[d]
        
        if 0 <= nx < n and 0 <= ny < m:
            if graph[nx][ny] == 0:
                if not visited[nx][ny]:
                    visited[nx][ny] = True
                    cnt += 1
                    queue.append((nx, ny))
                    flag = True
                    break
                
    if not flag: # ํ›„์ง„
        nx = x - dx[d] 
        ny = y - dy[d]
        if graph[nx][ny] == 1:
            print(cnt)
            break
        else:
            queue.append((nx, ny))
                

์‹œ๊ฐ„๋ณต์žก๋„

ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์ฃผ์–ด์ง„ ๋งต์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค. 
๋งต์˜ ํฌ๊ธฐ๊ฐ€ Nร—M์ผ ๋•Œ, ๋ชจ๋“  ์นธ์„ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•˜๋ฏ€๋กœ 
์ตœ์•…์˜ ๊ฒฝ์šฐ O(Nร—M)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
profile
์ฐจ๊ณก์ฐจ๊ณก

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