[BOJ]14226 : 이모티콘
2024. 8. 26. 16:47ㆍ[Algorithm]/문제 풀이
문제
https://www.acmicpc.net/problem/14226
사용 알고리즘
BFS
풀이
1. visited 관리
- 현재 스티커의 갯수 뿐만 아니라 클립보드에 있는 스티커 수 별로도 시간이 달라지기 때문에 2차원 배열로 관리
- 이미 방문한 곳을 계속 방문하지 않기 위해 사용
2. bfs
- 동일한 가중치를 가지는 그래프에서 최단 경로를 찾는 데 유리
- BFS는 보통 모든 경우를 탐색하기 때문에, 경우의 수가 많을 때는 비효율적일 수 있지만, S의 최대값이 1000이므로, BFS로 충분히 해결 가능하다고 판단
+ heapq 를 사용한 다익스트라 알고리즘은 가중치가 다른 경로에서 최단 경로를 찾을 때 사용
+ 이 문제에서 각 연산은 동일한 비용(1초)을 가지므로, 다익스트라보다 BFS가 더 간단하고 효율적이라고 판단하여 BFS 선택
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
q = deque([(1, 0)]) # (cur, clip)
visited = [[0] * 1001 for _ in range(1001)]
cnt = 0
while q:
cur, clip = q.popleft()
if cur == N:
print(visited[cur][clip])
break
arr = [(cur, cur), (cur + clip, clip), (cur - 1, clip)]
for c, v in arr:
if 0 < c < 1001 and 0 <= v < 1001 and visited[c][v] == 0:
q.append((c, v))
visited[c][v] = visited[cur][clip] + 1
결과
'[Algorithm] > 문제 풀이' 카테고리의 다른 글
[BOJ]1806. 부분합 (0) | 2024.09.09 |
---|---|
[BOJ]5636. 소수 부분 문자열 (0) | 2024.09.09 |
[BOJ]17144. 미세먼지 안녕! (2) | 2024.08.28 |
[BOJ]9465. 스티커 (9) | 2024.08.28 |
[BOJ]2638. 치즈 (0) | 2024.08.27 |