Algorithm/Problems

99클럽 코테 스터디 18일차 TIL + BFS

공부좀하시졍 2025. 4. 23. 23:31

https://www.acmicpc.net/problem/27971

import sys
from collections import deque

input = sys.stdin.readline

n,m,a,b = map(int, input().split())
dp = [0] * (n+1)
visited = [False] * (n+1)

for _ in range(m):
    l,r = map(int, input().split())
    for i in range(l, r+1):
        visited[i] = True # 닫힌구간 방문처리

dp[n] = 0
q = deque()
q.append(n)
while q:
    value = q.popleft()
    if value == 0:
        break
    for i in (value-a, value-b):
        if i >= 0:
            if visited[i]:
                continue
            else:
                q.append(i)
                dp[i] = dp[value] + 1
                visited[i] = True

if dp[0]:
    print(dp[0])
else:
    print(-1)
  • dp로 많이 풀지만 점화식을 생각하지 못해 bfs로 풀이했다.
  • n마리를 생성했다고 하고 a, b마리씩 빼준다.
  • visited 리스트를 사용하여 닫힌 구간은 방문했다 라고 가정한다.
  • 그러므로 visited 리스트 값이 False라면 큐에 넣고 방문처리를 한다.