For Programmer
백준 14226번 파이썬 문제풀이(BFS - 이모티콘) 본문
728x90
이 문제는 답을 보고도 생각하는데 오래 걸렸던 문제이다. 문제의 핵심은 bfs를 돌기위하여 방문 처리를 이중리스트로 만드는 것이 핵심이다. 즉, visited[화면이모티콘 개수][클립보드 이모티콘 개수] 로 설정하여 각각의 경우마다 방문처리를 해주어야 한다는 것이다. 또한 이모티콘 개수가 범위를 벗어나지 않도록 범위처리를 해주는것도 핵심이다.
from collections import deque
S = int(input())
queue = deque([[1, 0, 0]]) # 화면의 이모티콘 개수, 클립보드 이모티콘 개수, 연산 횟수
visited = [[False] * 1001 for _ in range(1001)]
visited[1][0] = True
while queue:
screen, clipboard, cnt = queue.popleft()
if screen == S: # 만약 스크린의 개수와 S가 동일하다면
print(cnt) # 걸린 횟수를 출력 후
break # 탈출
for i in range(3): # 연산을 3번 수행한다.
# 화면에 있는 이모티콘을 복사해서 클립보드에 저장
if i == 0:
new_clipboard, new_screen = screen, screen
# 화면에 클립보드에 있는 이모티콘 들을 추가
elif i == 1:
new_screen, new_clipboard = screen + clipboard, clipboard
# 화면에 있는 이모티콘 개수 한개 빼기
else:
new_screen, new_clipboard = screen - 1, clipboard
# 만약 새로 계산된 이모티콘과 클립보드의 개수가 범위를 벗어나거나 이미 방문한 적이 있다면 continue
if new_screen >= 1001 or new_screen < 0 or new_clipboard >= 1001 or new_clipboard < 0 or visited[new_screen][
new_clipboard]:
continue
# 방문처리 후 연산 횟수를 +1 하여 큐에 추가
visited[new_screen][new_clipboard] = True
queue.append([new_screen, new_clipboard, cnt + 1])
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준1261번 파이썬 문제풀이(알고스팟) - (BFS, 다익스트라 ) (0) | 2021.12.10 |
---|---|
백준 13549번 파이썬 문제풀이(BFS - 숨바꼭질 3) (0) | 2021.12.07 |
백준 13913번 파이썬 문제풀이(BFS - 숨바꼭질 4) (0) | 2021.11.24 |
백준 1697번 파이썬 문제풀이(BFS - 숨바꼭질) (0) | 2021.11.23 |
백준 7562번 파이썬 문제풀이(큐와 그래프 - 나이트의 이동) - BFS (0) | 2021.11.23 |
Comments