백준 14226 이모티콘
문제해석
- 초기상태로 화면에 1개의 이모티콘이 있다.
- 3가지 연산이 가능하다.
- 화면의 이모티콘 모두를 클립보드에 복사 후 덮어쓰기
- 클립보드의 이모티콘을 화면에 붙여넣기
- 화면의 이모티콘을 하나 제거하기
N
개의 이모티콘을 화면에 남기기 위한 최소한의 연산 수를 구하는 문제
Key word
- 경우의 수
- 동적할당(?)
- 백트래킹
풀이 접근
경우의 수를 구하는 문제이므로, BFS로 경우의 수 트리를 탐색하는 문제로 생각한다.
모든 경우를 탐색하게 된다면, 시간 또는 메모리 초과가 나기 때문에 BackTracking으로 고려하지 않아도 되는 경우라면 빠르게 포기한다.
Solution
Try 1
# Out of Memory Issue
from collections import deque
def bfs(target):
queue = deque([(1,0,0)])
while True :
value, clip, time = queue.popleft()
if value == target:
return time
else:
# === Three kind of operations ===
queue.append((value+clip, clip, time+1))
queue.append((value, value, time+1))
queue.append((value-1, clip, time+1)
Try 2
from collections import deque
# === Define BFS Function ===
def bfs(target):
queue = deque([(1,0,0)])
visited = [False for i in range(target*2+1)]
stacked = [False for i in range(target*2+1)]
while True :
value, clip, time = queue.popleft()
visited[value] = True
if value == target:
return time
else:
# === operation 1 : paste the clip board content to the screen ===
if value+clip<target*2 and not visited[value+clip] :
queue.append((value+clip, clip, time+1))
# === operation 2 : copy the screen content ===
if not stacked[value]:
queue.append((value, value, time+1))
stacked[value] =True
# === operation 3 : remote 1 emoji from the screen ===
if value>1 and not visited[value-1]:
queue.append((value-1, clip, time+1))
# === Get input and print the result ===
N = int(input())
print(bfs(N))
References
'프로그래밍' 카테고리의 다른 글
백준 12865 평범한 배낭 - 파이썬 풀이 🦄 (0) | 2021.03.21 |
---|---|
백준 13460 구슬탈출 2 - 파이썬 풀이 🦄 (0) | 2021.03.21 |
[백준 11052 카드 구매하기] - 파이썬 풀이 🦄 (1) | 2021.02.27 |
[백준 2688 줄어들지 않아] - 파이썬 풀이 🦄 (0) | 2021.02.27 |
[백준 4811 알약] - 파이썬 풀이 🦄 (0) | 2021.02.27 |