๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[BAEKJOON python] 3190_๋ฑ€ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/BAEKJOON

[BAEKJOON python] 3190_๋ฑ€

์ง•์ง•์•ŒํŒŒ์นด 2022. 10. 10. 20:34
728x90
๋ฐ˜์‘ํ˜•
๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.
๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค.
๊ฒŒ์ž„์€ 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) BFS
from collections import deque

N = int(input())
K = int(input())

# ๋งต ์ •๋ณด (์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ณณ์€ 1)
apple = [[0] * (N+1) for _ in range(N+1)]
for _ in range(K):
    a, b = map(int, input().split())
    apple[a][b] = 1

direction = []
L = int(input())
for i in range(L) :
    # ์ •์ˆ˜ X, ๋ฌธ์ž C
    x, c = input().split()
    direction.append((int(x), c))

# ์ƒ ์šฐ ํ•˜ ์ขŒ
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]

def turn(d, c) :
    # ์™ผ์ชฝ์œผ๋กœ, ์ƒ ์ขŒ ํ•˜ ์šฐ
    # ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์ƒ ์šฐ ํ•˜ ์ขŒ
    if c == "D" :
        d = (d + 1) % 4
    else :
        d = (d - 1) % 4
    return d

def bfs() :
    # ์ดˆ๊ธฐ ๋ฐฉํ–ฅ
    dd = 0
    # ์ดˆ๊ธฐ ์‹œ๊ฐ„
    tt = 0
    # ๋‹ค์Œ์— ํšŒ์ „ํ•  ์ •๋ณด
    index = 0 
    # ๋ฑ€ ์œ„์น˜
    x, y = 1, 1
    apple[x][y] = 2
    # ๋ฐฉ๋ฌธ ์œ„์น˜
    q = [(x, y)]
    # q.append((x, y))

    while True :
        ny = y + dy[dd]
        nx = x + dx[dd]
        
        # ๋ฐฉ๋ฌธ ์•ˆํ•œ๊ณณ 0, ์‚ฌ๊ณผ 1, ๋ฐฉ๋ฌธํ•œ๊ณณ2
        if 1 <= ny <= N and 1 <= nx <= N and apple[nx][ny] != 2 :
            # ์‚ฌ๊ณผ ์—†์Œ
            if apple[nx][ny] == 0 :
                # ๊ผฌ๋ฆฌ ์ œ๊ฑฐ
                apple[nx][ny] = 2
                q.append((nx, ny))
                # ์ด๋™ ์ขŒํ‘œ ๋ณ€ํ™˜
                px, py = q.pop(0)
                apple[px][py] = 0

            # ์‚ฌ๊ณผ ์žˆ์Œ
            if apple[nx][ny] == 1 :
                apple[nx][ny] = 2
                q.append((nx, ny))
        # ๋ถ€๋”ชํžˆ๋ฉด
        else :
            tt += 1
            break
        # ๋‹ค์Œ ์œ„์น˜๋กœ ๋จธ๋ฆฌ ์ด๋™
        x, y = nx, ny
        tt += 1

        if index < L and tt == direction[index][0] :
            dd = turn(dd, direction[index][1])
            index += 1

    return tt
print(bfs())

# input
# 6
# 3
# 3 4
# 2 5
# 5 3
# 3
# 3 D
# 15 L
# 17 D

# output
# 9
728x90
๋ฐ˜์‘ํ˜•
Comments