๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ

[python] ๋ฐฑ์ค€3190_๋ฑ€ (๊ตฌํ˜„)

by ๋ญ…์ฆค 2022. 2. 15.
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

ํ’€์ด

์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ์ƒ์˜ ๋งต์—์„œ ๋ฑ€์ด ์ด๋™ํ•˜๋„๋ก ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ์œ„์น˜์—์„œ ๋™,๋‚จ,์„œ,๋ถ์˜ ์œ„์น˜๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ๋ฑ€์˜ ๋จธ๋ฆฌ๊ฐ€ ๋ฑ€์˜ ๋ชธ์— ๋‹ฟ๋Š” ์ˆœ๊ฐ„ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋งค ์‹œ์ ๋งˆ๋‹ค ๋ฑ€์ด ์กด์žฌํ•˜๋Š” ์œ„์น˜๋ฅผ ํ•ญ์ƒ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ์— ๊ธฐ๋กํ•ด์•ผ ํ•œ๋‹ค.

n = int(input())
k = int(input())
data= [[0]*(n+1) for _ in range(n+1)]
info = []

for _ in range(k):
    a,b = map(int,input().split())
    data[a][b] = 1

l = int(input())
for _ in range(l):
    x,c = input().split()
    info.append((int(x),c))

# ๋™,๋‚จ,์„œ,๋ถ
dx = [0,1,0,-1] 
dy = [1,0,-1,0]

def turn(direction, c):
    if c=='L':
        direction = (direction-1)%4
    else :
        direction = (direction+1)%4
    return direction

def simulate():
    x,y = 1,1 # ์ฒ˜์Œ ๋ฑ€์˜ ์œ„์น˜
    data[x][y]=2 # ๋ฑ€์ด ์žˆ๋Š” ๊ณณ์€ 2๋กœ
    direction = 0 # ์ฒ˜์Œ ๋™์ชฝ
    time = 0
    index = 0 # ๋‹ค์Œ์— ํšŒ์ „ํ•  ์ •๋ณด
    q = [(x,y)] # ๋ฑ€์ด ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์œ„์น˜ ์ •๋ณด(๊ผฌ๋ฆฌ๊ฐ€ ์•ž์ชฝ)
    
    while True:
        nx = x + dx[direction]
        ny = y + dy[direction]
        # ๋งต์˜ ๋ฒ”์œ„ ์•ˆ์กฑ์ด๊ณ  ๋ฑ€์˜ ๋ชธํ†ต์ด ์—†๋Š” ๊ณณ์ด๋ฉด
        if 1 <= nx and nx <=n and 1<=ny and ny <=n and data[nx][ny] !=2 :
            # ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋™ ํ›„์— ๊ผฌ๋ฆฌ ์ œ๊ฑฐ
            if data[nx][ny] == 0:
                data[nx][ny] = 2
                q.append((nx,ny))
                px, py = q.pop(0)
                data[px][py] = 0
            # ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋™ ํ›„์— ๊ผฌ๋ฆฌ ๊ทธ๋Œ€๋กœ
            if data[nx][ny] == 1:
                data[nx][ny] =2
                q.append((nx,ny))
        
        # ๋ฒฝ์ด๋‚˜ ๋ชธํ†ต์— ๋ถ€๋”ชํ˜”๋‹ค๋ฉด
        else:
            time +=1
            break
        x,y = nx, ny # ๋‹ค์Œ ์œ„์น˜๋กœ ๋จธ๋ฆฌ ์ด๋™
        time += 1
        if index < l and time == info[index][0] : # ํšŒ์ „ํ•  ์‹œ๊ฐ„์ธ ๊ฒฝ์šฐ ํšŒ์ „
            direction = turn(direction,info[index][1])
            index += 1
    return time
๋ฐ˜์‘ํ˜•