[BOJ] 3190. ๋ฑ€ (๐Ÿฅ‡, ๊ตฌํ˜„/์‹œ๋ฎฌ๋ ˆ์ด์…˜)

lemythe423ยท2023๋…„ 5์›” 20์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
22/133
post-thumbnail

๋ฌธ์ œ

'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๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

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

์‚ฌ๊ณผ์˜ ์œ„์น˜๋Š” 1ํ–‰ 1์—ด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค

ํ’€์ด

์•„์ด๋””์–ด

  • ์šฐ์„  ๋ฑ€์ด ํ˜„์žฌ ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ์œ„์น˜ ์ขŒํ‘œ๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค. ์ฒ˜์Œ์—” ๋จธ๋ฆฌ๋ž‘ ๊ผฌ๋ฆฌ๋งŒ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์‚ฌ๊ณผ๊ฐ€ ์—†๋Š” ์นธ์œผ๋กœ ์ด๋™ํ•ด์„œ ๋จธ๋ฆฌ๊ฐ€ ๋จผ์ € ์ด๋™ํ•˜๊ณ  ๊ผฌ๋ฆฌ๋ฅผ ์‚ญ์ œํ–ˆ์„ ๋•Œ ๊ทธ๋•Œ ์œ„์น˜ํ•ด์•ผ ํ•  ๊ผฌ๋ฆฌ์˜ ์ขŒํ‘œ๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค. ๋ชจ๋“  ๋ฑ€์˜ ๋ชธํ†ต ์œ„์น˜ ์ขŒํ‘œ ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ , append์™€ pop์„ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค
  • ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜ ์ž๊ธฐ ์ž์‹ ๊ณผ ๋งŒ๋‚˜๋ฉด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฒฝ์— ๋ถ€๋”ชํžŒ ์ฒ˜๋ฆฌ๋Š” ์‰ฌ์› ๋Š”๋ฐ ์ž๊ธฐ ์ž์‹ ๊ณผ ๋งŒ๋‚˜๋Š” ๊ฑด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ์™€ ๋น„์Šทํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์ด๋™ํ•˜๊ฒŒ ๋  ์œ„์น˜์ขŒํ‘œ๊ฐ€ ํ˜„์žฌ ๋ฑ€์ด ์œ„์น˜์ขŒํ‘œ๊ฐ’์„ ๋ชจ๋‘ ๋‹ด์•„๋‘” ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๊ฐ’์ธ์ง€๋ฅผ ์ฐพ๋Š” in์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค
  • ๋‹ค์Œ์— ์ด๋™ํ•  ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋“  ์—†๋“  ๋ฑ€์˜ ๋จธ๋ฆฌ๋Š” ๋ชธ์„ ๋Š˜๋ ค ๋ฌด์กฐ๊ฑด ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„  ์ด๋™์„ ์‹œํ‚จ ๋‹ค์Œ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ผฌ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด ๊ผฌ๋ฆฌ๋ฅผ ๋ฑ€์˜ ์œ„์น˜ ์ขŒํ‘œ ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค(๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ํ’€์—ˆ๋‹ค๋ฉด ๊ผฌ๋ฆฌ ๋ถ€๋ถ„์˜ ๊ฐ’์„ 0์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค)
  • ์ด๋™์ด ๋๋‚œ ํ›„์— ๋ฐฉํ–ฅ์„ ๋ณ€๊ฒฝํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. X์ดˆ๊ฐ€ ๋๋‚œ ํ›„์—~ ๋ผ๊ณ  ๋˜์–ด์žˆ์Œ

์ฝ”๋“œ

  • deque๋ฅผ ์“ฐ๋ฉด ์ข€ ๋” ๋น ๋ฅผ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์˜คํžˆ๋ ค 2๋ฐฐ๊ฐ€ ๋” ๊ฑธ๋ฆผ
  • ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ ํ–ˆ๊ณ  ์‚ฌ๊ณผ๊ฐ€ ์œ„์น˜ํ•œ ๊ณณ์€ 2, ๋ฑ€์ด ์œ„์น˜ํ•œ ๊ณณ์€ 1, ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด 0
# 48ms

N, K = int(input()), int(input())
board = [[0] * N for _ in range(N)]
dr, dc = (0, 1, 0, -1), (1, 0, -1, 0)

# ์‚ฌ๊ณผ๋Š” 2
for _ in range(K):
    i, j = map(int, input().split())
    board[i-1][j-1] = 2

L, times = int(input()), []
for _ in range(L):
    time, dir = input().split()
    times.append((int(time), dir))

def dummy():
    dir, now = 0, 1
    snake = [(0, 0)]
    # ๋ฑ€์€ 1
    board[0][0] = 1
    while True:
        r, c = snake[-1]
        
        # ์ผ๋‹จ ๋ชธ ๋Š˜๋ฆฌ๊ธฐ
        nr, nc = r+dr[dir], c+dc[dir]

        # ๋ฑ€์ด ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ฑฐ๋‚˜ ์ž๊ธฐ ์ž์‹ ์„ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ๊ฒŒ์ž„ ์ข…๋ฃŒ
        if (nr<0 or nr>=N or nc<0 or nc>=N) or board[nr][nc] == 1:
            return now
        
        # ์ด๋™์€ ๋ฌด์กฐ๊ฑด ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จธ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ ์ด๋™
        snake.append((nr, nc))

        # ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ์ž๋ฆฌ์˜€๋‹ค๋ฉด ๋จธ๋ฆฌ๊ฐ€ ์ฐจ์ง€
        if board[nr][nc] == 2:
            board[nr][nc] = 1
        
        # ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ ๋น„์›Œ์คŒ
        else:
            board[nr][nc] = 1
            er, ec = snake.pop(0)
            board[er][ec] = 0
            

        # ํ•œ ๊ณผ์ •์ด ๋๋‚œ ํ›„ ๋ฐฉํ–ฅ์ด ๋ฐ”๋€” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‚˜ ํ™•์ธ
        if times and now == (change:=times[0])[0]:
            if change[1] == 'D':
                dir = (dir+1)%4
            else:
                dir = (dir+3)%4
            times.pop(0)

        # ๋ชจ๋“  ๊ณผ์ •์ด ์ข…๋ฃŒ๋์œผ๋‹ˆ 1์ดˆ ์ฆ๊ฐ€
        now += 1

print(dummy())
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€