์ฝ”ํ…Œ์ค€๋น„

<dfs, bfs> ๋ฐฑ์ค€ 14503๋ฒˆ. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ (๊ณจ๋“œ 5)

์š”๋Œœ๋‹ค 2023. 1. 6. 04:33

https://www.acmicpc.net/problem/14503

 

14503๋ฒˆ: ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์žฅ์†Œ๋Š” N×M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1×1ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด

www.acmicpc.net

import sys
from collections import deque
input = sys.stdin.readline
  
n, m = map(int, input().split()) #์„ธ๋กœ, ๊ฐ€๋กœ
r, c, d = map(int, input().split()) #์‹œ์ž‘ ์ขŒํ‘œ, ๋ฐฉํ–ฅ
# 0:๋ถ, 1:๋™, 2:๋‚จ, 3:์„œ
lst = []
visited = [[0] * m for _ in range(n)]
dx = [-1,0,1,0]
dy = [0,1,0,-1] #๋ถ, ๋™, ๋‚จ, ์„œ
for _ in range(n):
  lst.append(list(map(int, input().split())))

#step 1
visited[r][c] = 1 # ์‹œ์ž‘ ์ง€์  -> ์ฒญ์†Œ ์™„๋ฃŒ
cnt = 1

while 1:
  wall = [1,1,1,1] # ๋„ค ๋ฑกํ–ฅ ๋ชจ๋‘ ์ฒญ์†Œ or ๋ฒฝ์ธ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•จ
  #step 2
  for i in range(4): #๋ชจ๋“  ๋ฐฉํ–ฅ์„ ํšŒ์ „ํ•˜๊ธฐ ์œ„ํ•จ
    # print(*lst, sep='\n')  
    d = (d+3)%4 # ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
    nx,ny = r + dx[d], c + dy[d] # ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์ „์ง„
    if 0 <= nx < n and 0 <= ny < m and lst[nx][ny] == 0: #step2-2:ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ 1์นธ ์ „์ง„ํ–ˆ์„ ๋•Œ, ์ฒญ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด
      if visited[nx][ny] == 0: #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์žฅ์†Œ๋ฉด
        visited[nx][ny] = 1 # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        r, c = nx, ny
        cnt += 1 # ์ฒญ์†Œ+1
        wall[i] = 0
        break

  #step 2-4    
  if sum(wall)==4 : #๋„ค ๋ฐฉํ–ฅ ๋ชจ๋‘ ๋ง‰ํ˜€ ์žˆ๋Š” ๊ฒฝ์šฐ
    if lst[r-dx[d]][c-dy[d]] == 0: #ํ›„์ง„์€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
      r,c = r-dx[d], c-dy[d] #ํ›„์ง„
    else : # ํ›„์ง„๋„ ๋ชปํ•˜๋ฉด
      break #์ž‘๋™๋ฉˆ์ถค
  
    
 
print(cnt)