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

BOJ 13700 - μ™„μ „ 범죄

by HandHand 2021. 6. 29.

문제

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

풀이 κ³Όμ •

μ‹œμž‘ μ§€μ μ—μ„œ λͺ©ν‘œ 지점에 λ„λ‹¬ν•˜λŠ” μ΅œμ†Œ 이동 횟수λ₯Ό κ΅¬ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
문제 μ‘°κ±΄μ—μ„œ κ²½μ°°μ„œμ— 쀑간에 λ°©λ¬Έν•˜λ©΄ μ•ˆλœλ‹€λŠ” 쑰건이 있기 λ•Œλ¬Έμ— BFS λ₯Ό μ΄μš©ν•˜μ—¬ 탐색을 μ§„ν–‰ν•˜κΈ° 전에
λͺ¨λ“  κ²½μ°°μ„œ 지점을 방문처리 ν•΄μ€€ λ’€ 탐색을 μˆ˜ν–‰ν•˜λ„λ‘ ν•΄μ€λ‹ˆλ‹€.

μ½”λ“œ


import sys
from collections import deque


INF = 2e9


def bfs(start, goal):
    q = deque()
    visit = [0] * (N + 1)

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

    for office in police_office:
        visit[office] = 1

    while q:
        here, click = q.popleft()

        if here == goal:
            return click

        for there in [here + F, here - B]:
            if 1 <= there <= N and not visit[there]:
                visit[there] = 1
                q.append([there, click + 1])

    return INF


def solution():
    press_count = bfs(S, D)

    return press_count if press_count != INF else 'BUG FOUND'


if __name__ == '__main__':
    N, S, D, F, B, K = list(map(int, sys.stdin.readline().split()))
    police_office = list(map(int, sys.stdin.readline().split()))

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

'πŸƒ algorithm > boj' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

BOJ 5076 - Web Pages  (0) 2021.07.19
BOJ 1920 - 수 μ°ΎκΈ°  (0) 2021.07.05
BOJ 14950 - μ •λ³΅μž  (0) 2021.06.25
BOJ 1197 - μ΅œμ†Œ μŠ€νŒ¨λ‹ 트리  (0) 2021.06.18
BOJ 4963 - μ„¬μ˜ 개수  (0) 2021.06.15

πŸ’¬ λŒ“κΈ€