λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/boj

BOJ 14226 - 이λͺ¨ν‹°μ½˜

by HandHand 2021. 3. 8.

문제

λ°±μ€€ 온라인 저지 - 14226번

풀이 κ³Όμ •

μˆ˜ν–‰ν•  수 μžˆλŠ” μ—°μ‚°μ˜ μ’…λ₯˜κ°€ 3가지 일 λ•Œ, 이λͺ¨ν‹°μ½˜ 1κ°œμ—μ„œ N 개둜 λ§Œλ“€κΈ° μœ„ν•œ μ΅œμ†Œ μ—°μ‚°μ˜ 횟수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

ν˜„μž¬ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€μˆ˜λŠ” 화면에 μ‘΄μž¬ν•˜λŠ” 이λͺ¨ν‹°μ½˜μ˜ 수 와 ν΄λ¦½λ³΄λ“œμ— μžˆλŠ” 이λͺ¨ν‹°μ½˜μ˜ 수 μ΄λ―€λ‘œ
이 두 λ³€μˆ˜λ₯Ό μƒνƒœκ³΅μ‚°μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ •ν•©λ‹ˆλ‹€.
μ£Όμ˜ν•  점은 ν΄λ¦½λ³΄λ“œμ— μ €μž₯된 이λͺ¨ν‹°μ½˜μ„ 화면에 λΆ™μ—¬λ„£κΈ° ν•œλ‹€κ³  ν΄λ¦½λ³΄λ“œμ—μ„œ μ‚­μ œλ˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ½”λ“œ


from collections import deque

S = int(input())


def bfs():
    q = deque()
    visit = [[0] * (2 * S + 1) for _ in range(2 * S + 1)]

    q.append([1, 0, 0])
    visit[1][0] = 1

    while q:
        here, clipboard, time = q.popleft()

        if here == S:
            return time

        # 화면에 μžˆλŠ” 이λͺ¨ν‹°μ½˜ 쀑 ν•˜λ‚˜ μ‚­μ œ
        if here > 0 and not visit[here - 1][clipboard]:
            visit[here - 1][clipboard] = 1
            q.append([here - 1, clipboard, time + 1])

        # ν΄λ¦½λ³΄λ“œμ— μžˆλŠ” λͺ¨λ“  이λͺ¨ν‹°μ½˜ 화면에 λΆ™μ—¬λ„£κΈ°
        if clipboard and here + clipboard <= 2 * S and not visit[here + clipboard][clipboard]:
            visit[here + clipboard][clipboard] = 1
            q.append([here + clipboard, clipboard, time + 1])

        # 화면에 μžˆλŠ” 이λͺ¨ν‹°μ½˜ λ³΅μ‚¬ν•΄μ„œ ν΄λ¦½λ³΄λ“œμ— μ €μž₯
        if here > 0 and here != clipboard and not visit[here][here]:
            visit[here][here] = 1
            q.append([here, here, time + 1])


def solution():
    answer = bfs()

    return answer


print(solution())
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€