DonHurry

[Python] ๋ฐฑ์ค€ 3190๋ฒˆ - ๋ฑ€ ๋ณธ๋ฌธ

Problem Solving

[Python] ๋ฐฑ์ค€ 3190๋ฒˆ - ๋ฑ€

_๋„๋… 2024. 1. 17. 13:03

๐Ÿ“– ๋ฌธ์ œ

 

3190๋ฒˆ: ๋ฑ€

'Dummy' ๋ผ๋Š” ๋„์Šค๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค. ๊ฒŒ์ž„

www.acmicpc.net

 

๐Ÿ”Ž ํ’€์ด

deque๋ฅผ ์ด์šฉํ•˜๋ฉด ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. deque๋Š” ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ์•ž์ด๋‚˜ ๋งจ ๋’ค์˜ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š”๋ฐ O(1)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋ฑ€์ด ์‚ฌ๊ณผ๋ฅผ ๋จน์€ ๊ฒฝ์šฐ ์•ž์— ์ƒˆ๋กœ์šด ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์‚ฌ๊ณผ๋ฅผ ๋จน์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋’ค์—์„œ ์ขŒํ‘œ๋ฅผ ์ œ๊ฑฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ฃผ์˜ํ•  ์ ์€ ์‚ฌ๊ณผ์˜ ์œ„์น˜๊ฐ€ (1, 1) ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ์—์„œ "๋งจ ์œ„ ๋งจ ์ขŒ์ธก(1ํ–‰ 1์—ด)์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค." ๋ผ๊ณ  ๊ฐ„์ ‘์ ์œผ๋กœ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ขŒํ‘œ๋ฅผ 0๋ถ€ํ„ฐ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ์‚ฌ๊ณผ์˜ ์œ„์น˜์—์„œ 1์”ฉ ๋นผ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
from collections import deque
input=sys.stdin.readline

n = int(input())
board = [[0 for _ in range(n)] for _ in range(n)]
k = int(input())
for _ in range(k):
    y, x = map(int, input().split())
    board[y-1][x-1] = 1  # index 0๋ถ€ํ„ฐ ์„ค์ •ํ•˜๋ฉด -1์”ฉ ํ•ด์ฃผ๊ธฐ

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

dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]

idx = 0
time = 0
snake = deque()  # ๋ฑ€์˜ ์ขŒํ‘œ
snake.append((0, 0))
board[0][0] = -1

while True:
    # ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ๋ฑ€ ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ
    if direct and direct[0][0] == time:
        _, mark = direct.popleft()
        if mark == 'L':
            idx += 3
        elif mark == 'D':
            idx += 1
        idx %= 4
    
    x, y = snake[0]
    i, j = x + dx[idx], y + dy[idx]
	
    # ๊ฒŒ์ž„์ด ๋๋‚˜๋Š” ์กฐ๊ฑด
    if not (0 <= i < n) or not (0 <= j < n) or board[j][i] == -1:
        break
	
    # ์‚ฌ๊ณผ๊ฐ€ ์—†์„ ์‹œ, ๋ฑ€์˜ ๊ผฌ๋ฆฌ ์ œ๊ฑฐ
    if not board[j][i]:
        end_x, end_y = snake.pop()
        board[end_y][end_x] = 0
	
    # ๋ฑ€ ๋จธ๋ฆฌ ์ด๋™
    board[j][i] = -1
    snake.appendleft((i, j))
    
    time += 1

print(time + 1)