๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/๊ตฌํ˜„

[๋ฐฑ์ค€]3190๋ฒˆ: ๋ฑ€

by syLim___ 2023. 3. 26.
728x90

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

 

3190๋ฒˆ: ๋ฑ€

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

www.acmicpc.net


๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ์ง€๋งŒ ์‹œ๊ฐ„์ด ์•„์ฃผ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.๐Ÿฅฒ

 

์ด ๋ฌธ์ œ ํ’€ ๋•Œ ์กฐ์‹ฌํ•  ์ ์€,

์ด๋™ ๋จผ์ €, ๋ฐฉํ–ฅ ์ „ํ™˜ ๋‚˜์ค‘์ด๋ผ๋Š” ์ ์ด๋‹ค!!

๋‚˜๋Š” ์ฒ˜์Œ์— ๋ฐฉํ–ฅ ์ „ํ™˜ ๋จผ์ € ํ•˜๊ณ  ์ด๋™์„ ๋‚˜์ค‘์— ํ•ด์„œ ์˜ค๋‹ต ํŒ์ •์„ ๋ฐ›์•˜์—ˆ๋‹ค.

 


 

์ œ์ถœ ์ฝ”๋“œ

๋นˆ ์ž๋ฆฌ๋Š” 0, ์‚ฌ๊ณผ๋Š” 1, ๋ฑ€์˜ ๋ชธํ†ต์€ 2๋กœ ํ‘œ์‹œํ•˜์˜€๋‹ค.

๋ฑ€์˜ ๋ชธํ†ต ์ขŒํ‘œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํ์— ๋‹ด์•„ ๊ผฌ๋ฆฌ๋ฅผ ์ค„์ผ ๊ฒฝ์šฐ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

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

# n * n ๋ฐฐ์—ด์„ ๋ชจ๋‘ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
n = int(input())
board = [[0]*n for _ in range(n)]

# ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ๋Š” ๋ชจ๋‘ 1๋กœ ํ‘œ์‹œ
k = int(input())
for k in range(k):
  x, y = map(int,input().split())
  board[x-1][y-1] = 1

# ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ €์žฅ
direction = deque()
l = int(input())
for i in range(l):
  t, d = input().split()
  direction.append((t,d))

# ๋‹ค์Œ ๋ณ€๊ฒฝ ์‹œ๊ฐ„๊ณผ, ๋ณ€๊ฒฝ ๋ฐฉํ–ฅ
change_t, change_d = direction.popleft()


# ์œ„, ์™ผ, ์•„๋ž˜, ์˜ค
dx = [-1,0,1,0]
dy = [0,-1,0,1]

# ๊ฒฝ๊ณผ์‹œ๊ฐ„์€ 0, ํ˜„์žฌ๋ฐฉํ–ฅ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ดˆ๊ธฐํ™”
time = 0
direct = 3

# ๋ฑ€์˜ ๋ชธ์ด ์ง€๋‚˜๊ฐ„ ์ขŒํ‘œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ €์žฅ
# ๊ผฌ๋ฆฌ ๊ธธ์ด๋ฅผ ์ค„์—ฌ์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ
snake = deque()
snake.append((0,0))

x, y = 0, 0
while True:

  # ๊ฒฝ๊ณผ์‹œ๊ฐ„์„ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.
  time += 1

  # ๋ฑ€์ด ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ์ขŒํ‘œ๋กœ ์ด๋™
  nx, ny = x + dx[direct], y + dy[direct]

  # ๋ฆฌ์ŠคํŠธ ๋ฒ”์œ„ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ์ฒดํฌ
  if 0<=nx<n and 0<=ny<n:
    # ์‚ฌ๊ณผ๊ฐ€ ์žˆ์œผ๋ฉด, ๊ผฌ๋ฆฌ๋ฅผ ์ค„์ด์ง€ ์•Š๊ณ  ์ด๋™ํ•œ๋‹ค.
    if board[nx][ny] == 1:
      board[nx][ny] = 2
      snake.append((nx,ny))
      x, y = nx, ny
    # ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด, ๊ผฌ๋ฆฌ๋ฅผ ์ค„์ด๊ณ  ์ด๋™ํ•œ๋‹ค.
    elif board[nx][ny] == 0:
      tx, ty = snake.popleft()
      board[tx][ty] = 0 # ๊ผฌ๋ฆฌ๊ฐ€ ์žˆ๋˜ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ
      board[nx][ny] = 2
      snake.append((nx,ny))
      x, y = nx, ny
    # ์ด๋™ํ•˜๋ ค๋Š” ์ž๋ฆฌ์— ์ž์‹ ์˜ ๋ชธ์ด ์žˆ์œผ๋ฉด ์ข…๋ฃŒํ•œ๋‹ค
    elif board[nx][ny] > 1:
      break
  # ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ขŒํ‘œ๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.
  else:
    break

  # ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋ณ€๊ฒฝํ•œ๋‹ค.
  if time == int(change_t):
    if change_d == 'D':
      if direct > 0:
        direct -= 1
      else:
        direct = 3
    elif change_d == 'L':
      if direct < 3:
        direct += 1
      else:
        direct =0
    if len(direction) > 0:
      change_t, change_d = direction.popleft()
    else:
      change_t = 0

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(time)

 

 

๋ณด์™„ํ•  ์ 

๋ฐฉํ–ฅ ๋ณ€๊ฒฝ ๋ถ€๋ถ„์—์„œ ๋ฌด์ง€์„ฑ if-else๋ฌธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค

์•„๋ž˜์ฒ˜๋Ÿผ ํ•˜๋Š” ๊ฒŒ ๋” ๋ณด๊ธฐ ์ข‹๊ณ  ๊น”๋”ํ•œ๋“ฏํ•˜๋‹ค.

  if time == int(change_t):
    if change_d == 'D':
      direct = (direct - 1) % 4
    elif change_d == 'L':
      direct = (direct + 1) % 4
728x90