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

2021. 8. 28. 00:05

๋ฌธ์ œ

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

๊ฒŒ์ž„์€ NxN ์ •์‚ฌ๊ฐ ๋ณด๋“œ์œ„์—์„œ ์ง„ํ–‰๋˜๊ณ , ๋ช‡๋ช‡ ์นธ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ์ƒํ•˜์ขŒ์šฐ ๋์— ๋ฒฝ์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘ํ• ๋•Œ ๋ฑ€์€ ๋งจ์œ„ ๋งจ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ณ  ๋ฑ€์˜ ๊ธธ์ด๋Š” 1 ์ด๋‹ค. ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค.

๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™์„ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

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

์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ณด๋“œ์˜ ํฌ๊ธฐ N์ด ์ฃผ์–ด์ง„๋‹ค. (2 ≤ N ≤ 100) ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (0 ≤ K ≤ 100)

๋‹ค์Œ K๊ฐœ์˜ ์ค„์—๋Š” ์‚ฌ๊ณผ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํ–‰, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ์—ด ์œ„์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์‚ฌ๊ณผ์˜ ์œ„์น˜๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋ฉฐ, ๋งจ ์œ„ ๋งจ ์ขŒ์ธก (1ํ–‰ 1์—ด) ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜ L ์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ L ≤ 100)

๋‹ค์Œ L๊ฐœ์˜ ์ค„์—๋Š” ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ,  ์ •์ˆ˜ X์™€ ๋ฌธ์ž C๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ. ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ X์ดˆ๊ฐ€ ๋๋‚œ ๋’ค์— ์™ผ์ชฝ(C๊ฐ€ 'L') ๋˜๋Š” ์˜ค๋ฅธ์ชฝ(C๊ฐ€ 'D')๋กœ 90๋„ ๋ฐฉํ–ฅ์„ ํšŒ์ „์‹œํ‚จ๋‹ค๋Š” ๋œป์ด๋‹ค. X๋Š” 10,000 ์ดํ•˜์˜ ์–‘์˜ ์ •์ˆ˜์ด๋ฉฐ, ๋ฐฉํ–ฅ ์ „ํ™˜ ์ •๋ณด๋Š” X๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ •๋‹ต

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

# ๋ณด๋“œ ๊ทธ๋ฆฌ๊ธฐ
N = int(input())
board = [[0 for _ in range(N)] for _ in range(N)]

# ์‚ฌ๊ณผ ์œ„์น˜ ํ‘œ์‹œ
K = int(input())
for _ in range(K):
    x, y = map(int, input().split())
    board[x-1][y-1] = -1

# {์‹œ๊ฐ„ : ๋ฐฉํ–ฅ} ์œผ๋กœ ์ €์žฅ, ๋ฐฉํ–ฅ์€ L์€ 0, D๋Š” 1๋กœ ํ‘œ์‹œ
curve = {}
LD = {'L':0, 'D':1}
L = int(input())
for _ in range(L):
    x, c = input().split()
    curve[int(x)] = LD[c]


# 0: ๋ถ, 1: ๋™, 2: ์„œ, 3: ๋‚จ / [L์˜ ๋ฐฉํ–ฅ, D์˜ ๋ฐฉํ–ฅ]
dir = {0:[2,1], 1:[0,3], 2:[3,0], 3:[1,2]}
xy = {0:(-1,0), 1:(0,1), 2:(0,-1), 3:(1,0)}
c = 1   # ํ˜„์žฌ ๋™์ชฝ์„ ํ–ฅํ•จ

time = 0
body = deque([[0,0]])
while True:
    time += 1
    x, y = body[-1][0] + xy[c][0], body[-1][1] + xy[c][1]

    # ๋‹ฟ์œผ๋ฉด ๋ฉˆ์ถ”๊ธฐ
    if (x < 0 or y < 0 or x >= N or y >= N) or [x, y] in body:
        print(time)
        break
    
    # ์‚ฌ๊ณผ ๋จน๊ธฐ
    body.append([x,y])
    if board[x][y] == -1:
        board[x][y] = 0
    else:
        body.popleft()

    # ๋ฐฉํ–ฅ ๋ฐ”๊พธ๊ธฐ  
    if time in curve:
        c = dir[c][curve[time]]

N์„ ์ž…๋ ฅ๋ฐ›์•„ board๋ฅผ ๊ทธ๋ฆฌ๊ณ , K์™€ ์‚ฌ๊ณผ ์œ„์น˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์‚ฌ๊ณผ ์ž๋ฆฌ๋ฅผ -1๋กœ ํ‘œ์‹œํ•œ๋‹ค.

์‹œ๊ฐ„๊ณผ ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ curve์— ์ €์žฅํ•˜๋Š”๋ฐ,

์ด๋•Œ ํšŒ์ „ ๋ฐฉํ–ฅ์„ L์€ 0์œผ๋กœ D๋Š” 1๋กœ ์ €์žฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€๋ฉด์„œ ๋ฐฉํ–ฅ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ ค๋ณธ ๊ทธ๋ฆผ

๋ฐฉํ–ฅ์„ ํšŒ์ „ํ•  ๋•Œ ํ˜„์žฌ ๋ฐฉํ–ฅ์ด ์–ด๋””๋ƒ์— ๋”ฐ๋ผ x, y์— ๋”ํ•˜๋Š” ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค.

๋นจ๊ฐ„ ๊ธ€์”จ์˜ N, W, E, S๊ฐ€ ํ˜„์žฌ ๋ฐฉํ–ฅ์ผ ๋•Œ, ๋ฐ”๋€Œ๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ์ขŒํ‘œ๊ฐ’์ด ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋ ค๋ณด์•˜๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ ์•„๋ž˜์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ์ด ๋ฐ”๋€œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

# 0: ๋ถ, 1: ๋™, 2: ์„œ, 3: ๋‚จ / [L์˜ ๋ฐฉํ–ฅ, D์˜ ๋ฐฉํ–ฅ]
dir = {0:[2,1], 1:[0,3], 2:[3,0], 3:[1,2]}
xy = {0:(-1,0), 1:(0,1), 2:(0,-1), 3:(1,0)}
c = 1   # ํ˜„์žฌ ๋™์ชฝ์„ ํ–ฅํ•จ

์ด์ œ N์€ 0์œผ๋กœ, E๋Š” 1๋กœ, W๋Š” 2๋กœ, S๋Š” 3์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ๋”•์…”๋„ˆ๋ฆฌ์— ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค.

dir์€ { ํ˜„์žฌ ๋ฐฉํ–ฅ : [L ํ–ˆ์„ ๋•Œ ๋ฐฉํ–ฅ, D ํ–ˆ์„ ๋•Œ ๋ฐฉํ–ฅ] } ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ 

xy๋Š” { ํ˜„์žฌ ๋ฐฉํ–ฅ : [x์— ๋”ํ•˜๋Š” ์ˆ˜, y์— ๋”ํ•˜๋Š” ์ˆ˜] } ๋กœ

ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋•Œ ๋‹ค์Œ ์ขŒํ‘œ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋œปํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฏ€๋กœ ํ˜„์žฌ ๋ฐฉํ–ฅ์€ ๋™์ชฝ ์ฆ‰ 1์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

time = 0
body = deque([[0,0]])
while True:
    time += 1
    x, y = body[-1][0] + xy[c][0], body[-1][1] + xy[c][1]

ํ•œ์นธ์”ฉ ์ „์ง„ํ•  ๋•Œ๋งˆ๋‹ค time์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ  body์—๋Š” ํ˜„์žฌ ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ์ขŒํ‘œ๋ฅผ deque ํ˜•ํƒœ๋กœ ์ €์žฅํ•œ๋‹ค.

xy[c][0]์€ ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋•Œ x์— ๋”ํ•˜๋Š” ์ˆ˜๋ฅผ, xy[c][1]์€ ํ˜„์žฌ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋•Œ y์— ๋”ํ•˜๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

๋‹ค์Œ ์œ„์น˜์˜ ์ขŒํ‘œ x, y๊ฐ€ ๋ณด๋“œ๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ๋ชธ์— ๋‹ฟ์•˜์„ ๋•Œ ๋ฉˆ์ถ˜๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ์œ„์น˜๋ฅผ body์— ์ €์žฅํ•œ ๋‹ค์Œ ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋จน์–ด ์—†์• ๊ณ 

์—†๋‹ค๋ฉด ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚˜์ง€์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ๋ ์œ„์น˜๋ฅผ popleft ํ•œ๋‹ค.

๋ฐฉํ–ฅ์„ ์ „ํ™˜ํ•ด์•ผํ•œ๋‹ค๋ฉด c์— ํ˜„์žฌ ๋ฐฉํ–ฅ์ผ ๋•Œ ์ „ํ™˜ํ•˜๋ฉด ์–ด๋Š ๋ฐฉํ–ฅ์ด ๋˜๋Š”์ง€ ์ €์žฅํ•œ๋‹ค.

 

.

.

.

๋™์„œ๋‚จ๋ถ ์œ„์น˜๋ณ„๋กœ ์ƒ๊ฐํ•˜๋Š๋ผ ๋ญ”๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ํ‘ผ ๋Š๋‚Œ์ด๋‹ค.

๊ทœ์น™์„ ๋ชป์ฐพ๊ณ  ๋ชจ๋“  ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ด์„œ ํ’€์—ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ‘ธ๋Š”๊ฒŒ ๋งž๋‚˜ ์‹ถ์ง€๋งŒ ์ผ๋‹จ ํ•ด๊ฒฐํ–ˆ์œผ๋‹ˆ ํฌ์ŠคํŒ…ํ•ด๋ณธ๋‹ค ^__^

728x90

BELATED ARTICLES

more