구글링한 내용
Comment
⚠️ Error
# 2초 / 512MB
# 총 S개 보내기
# 이미 화면에 1개 입력
# 3가지 연산만 사용 -> S개 만들기
# 연산
# 화면에 있는거, 모두 복사 -> 클립보드 저장
# 이전 내용은 덮어쓰기
# 클립보드에 모든 임티 -> 화면에 붙여넣기
# 클립보드 비어있으면 붙여넣기 불가
# 화면에 있는 것중 하나 삭제
# 모든 연산은 1초
# Input
# S : 2이상, 1000이하
# Output
# 이모티콘 S개를 만들기 위한 시간의 최솟값from collections import deque
S = int(input())
visited = [[-1] * (2002) for _ in range(2002)]
def bfs(n):
# init queue & visited
queue = deque()
visited[n][0] = 0
queue.append((n, 0))
while queue:
# pop
cur, cur_clip = queue.popleft()
# terminal condition
if cur == S:
print(visited[cur][cur_clip])
break
# 경계 검사
if cur -1 >= 0:
# 줄이는 연산
if visited[cur-1][cur_clip] == -1:
visited[cur-1][cur_clip] = visited[cur][cur_clip] + 1
queue.append((cur-1, cur_clip))
# 클립보드에 복사 연산
if visited[cur][cur] == -1:
visited[cur][cur] = visited[cur][cur_clip] + 1
queue.append((cur, cur))
# 경계검사 & 화면에 붙여넣기 연산
if cur + cur_clip <= S and visited[cur + cur_clip][cur_clip] == -1:
visited[cur + cur_clip][cur_clip] = visited[cur][cur_clip] + 1
queue.append((cur + cur_clip, cur_clip))
bfs(1)from collections import deque
S = int(input())
def bfs(n):
# init queue & visited
# clip 데이터 값
clip = 1
queue = deque()
queue.append((n, clip))
visited[n] = 2
# while
while queue:
# pop
cur, cur_clip = queue.popleft()
# terminal condition
if cur == S:
break
# if 목표갯수보다 많으면
if cur > S :
# 줄이는 연산
if visited[cur-1] == -1:
visited[cur-1] = visited[cur] + 1
queue.append((cur-1, cur_clip))
# 아직 모자르면
else:
# 현재 clip값을 더하는 자리가 0이 아니라면 == 아직 방문 전이라면
if visited[cur + cur_clip] == -1:
# 기존 clip값을 복사만 하므로, + 1
visited[cur + cur_clip] = visited[cur] + 1
queue.append((cur + cur_clip, cur_clip))
# 화면에 있는거 모두 복사 & 클립보드 저장 : + 2초
if visited[cur*2] == -1:
visited[cur*2] = visited[cur] + 2
queue.append((cur*2, cur))
# 시작 이모티콘
visited = [-1] * (2002)
bfs(2)
print(visited[S])