ํ’€์ด


์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ†ตํ•œ ๋ฑ€๊ฒŒ์ž„ ๋ฌธ์ œ์ด๋‹ค.

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ค‘์š”ํ•œ ๊ตฌํ˜„์‚ฌํ•ญ์€

  1. ์‹œ๊ฐ„์ด ์ง€๋‚ ๋•Œ๋งˆ๋‹ค ๋ฑ€์ด ํ•œ์นธ์”ฉ ์›€์ง์ธ๋‹ค.

  2. ์‚ฌ๊ณผ๋ฅผ ๋จน์„ ๊ฒฝ์šฐ ๋ฑ€์˜ ๊ธธ์ด๊ฐ€ 1์นธ ์ฆ๊ฐ€ํ•œ๋‹ค.

  3. ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฉํ–ฅ์ „ํ™˜์„ ํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค.

๋ฑ€๊ฒŒ์ž„์„ ์ง„ํ–‰ ํ•  N x N ๋ณด๋“œ๋ฅผ ์ค€๋น„ํ•˜๊ณ  0, 0 ์— ๋ฑ€์„ ์œ„์น˜์‹œํ‚จ๋‹ค.

๋ฑ€์˜ default ๋ฐฉํ–ฅ์€ ์šฐ์ธก์ด๋‹ค.

์ฃผ์–ด์ง„ ์‚ฌ๊ณผ ์ •๋ณด๋ฅผ ํ†ตํ•ด N x N ๋ณด๋“œ์— ์‚ฌ๊ณผ๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค.

์‹œ๊ฐ„์ด ์ตœ๋Œ€ 10,000์ดˆ๋กœ ํ•œ์ •๋˜์–ด์žˆ์œผ๋‹ˆ ์ฃผ์–ด์ง„ ๋ฐฉํ–ฅ์ „ํ™˜์ˆœ๊ฐ„์„ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ํšŒ์ „๋ฐฉํ–ฅ์„ ์ €์žฅํ•œ๋‹ค.

๊ฒŒ์ž„์ด ์‹œ์ž‘๋๋‹ค.

์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ๋ฑ€์˜ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.

์ด๋•Œ ์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ๋ฑ€์ด ๋ณด๋“œ ๋ฐ–์œผ๋กœ ๊ฐ€๊ฑฐ๋‚˜ ์ž๊ธฐ์ž์‹ ์„ ์ง€๋‚˜๊ฒŒ ๋  ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ,

๋ฑ€์ด ์‚ฌ๊ณผ๋ฅผ ๋จน์ง€์•Š๋Š” ๊ฒฝ์šฐ๋งŒ์„ ์‚ฌ์šฉํ•ด ๋ฑ€์˜ ๊ผฌ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด๋œ๋‹ค.

๋˜ํ•œ ๋ฐฉํ–ฅ์ „ํ™˜์ˆœ๊ฐ„์ผ ๊ฒฝ์šฐ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋‘” direction ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ์ˆœํ™˜์—์„œ ์ „ํ™˜๋œ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฑ€์ด ์ด๋™ํ•˜๊ฒŒ๋” ์กฐ๊ฑด๋ฌธ์„ ์„ ์–ธํ•œ๋‹ค.

๋ฑ€์ด ๋ณด๋“œ ๋ฐ–์œผ๋กœ ๊ฐ€๊ฑฐ๋‚˜ ์ž๊ธฐ์ž์‹ ์„ ์ง€๋‚˜๊ฒŒ ๋  ๊ฒฝ์šฐ while๋ฌธ์„ ํƒˆ์ถœํ•˜๊ณ  ๊ฒŒ์ž„์‹œ์ž‘ ํ›„ ํ๋ฅธ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


import sys
 
input = sys.stdin.readline
# 0 : empty
# 1 : apple
# 2 : snake
 
# ๋ฐฉํ–ฅ์ „ํ™˜
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
 
 
def direction(c, d):
    if c == "L":
        d = (d - 1) % 4
    else:
        d = (d + 1) % 4
    return d
 
 
N = int(input())
K = int(input())
board = [[0] * N for _ in range(N)]
 
# ์‚ฌ๊ณผ ๋ฐฐ์น˜
for _ in range(K):
    x, y = map(int, input().split())
    board[x - 1][y - 1] = 1
 
L = int(input())
dirc = [0 for _ in range(10000)]
 
# ๋ฐฉํ–ฅ์ „ํ™˜์ˆœ๊ฐ„
for i in range(L):
    X, C = input().split()
    dirc[int(X)] = C
 
t, x, y, d = 0, 0, 0, 0
board[x][y] = 2  # initial position
snake_len = [[x, y]]  # ๋ฑ€์˜ ๊ธธ์ด
 
while True:
    t += 1
 
    # ๋‹ค์Œ ๋ฑ€๋จธ๋ฆฌ๊ฐ€ ์œ„์น˜ ํ•  ์ขŒํ‘œ
    x = x + dx[d]
    y = y + dy[d]
 
    if 0 <= x < N and 0 <= y < N and board[x][y] != 2:
        if board[x][y] == 0:  # ๋ฑ€์ด ์‚ฌ๊ณผ๋ฅผ ๋จน์ง€์•Š๋Š” ๊ฒฝ์šฐ
            nx, ny = snake_len.pop(0)  # ๊ผฌ๋ฆฌ ์ขŒํ‘œ ์ถ”์ถœ
            board[nx][ny] = 0  # ๊ผฌ๋ฆฌ ์ œ๊ฑฐ
        board[x][y] = 2  # ๋ฑ€ ์ขŒํ‘œ ์ˆ˜์ •
        snake_len.append([x, y])  # ๋ฑ€ ๊ธธ์ด ์ˆ˜์ •
        if dirc[t] != 0:  # ๋ฐฉํ–ฅ์ „ํ™˜์ˆœ๊ฐ„์ผ ๊ฒฝ์šฐ
            d = direction(dirc[t], d)
    else:
        print(t)
        break

References