728x90
반응형
https://www.acmicpc.net/problem/14226
문제
영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다.
영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만들어 보려고 한다.
- 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다.
- 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다.
- 화면에 있는 이모티콘 중 하나를 삭제한다.
모든 연산은 1초가 걸린다. 또, 클립보드에 이모티콘을 복사하면 이전에 클립보드에 있던 내용은 덮어쓰기가 된다. 클립보드가 비어있는 상태에는 붙여넣기를 할 수 없으며, 일부만 클립보드에 복사할 수는 없다. 또한, 클립보드에 있는 이모티콘 중 일부를 삭제할 수 없다. 화면에 이모티콘을 붙여넣기 하면, 클립보드에 있는 이모티콘의 개수가 화면에 추가된다.
영선이가 S개의 이모티콘을 화면에 만드는데 걸리는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 S (2 ≤ S ≤ 1000) 가 주어진다.
출력
첫째 줄에 이모티콘을 S개 만들기 위해 필요한 시간의 최솟값을 출력한다.
예제
Example 1:
Input:
2
Output:
2
Example 2:
Input:
4
Output:
4
Example 3:
Input:
6
Output:
5
Example 4:
Input:
18
Output:
8
조건
시간 제한 : 2초
메모리 제한 : 512 MB
풀이과정
풀이
from collections import deque
import sys
input = sys.stdin.readline
s = int(input())
# 클립보드 여부
ans = [[-1]*1001 for _ in range(1001)]
q = deque()
ans[1][0] = 0
# 화면 이모티콘 개수 / 클립보드 개수
q.append((1,0))
cnt = 1
while q:
now, clib = q.popleft()
# 1번
if ans[now][now] == -1:
ans[now][now] = ans[now][clib]+1
q.append((now, now))
# 2번
if 2 <= now+clib <= 1000 and ans[now+clib][clib] == -1:
ans[now+clib][clib] = ans[now][clib]+1
q.append((now+clib, clib))
# 3번
if 2 <= now-1 and ans[now-1][clib] == -1:
ans[now-1][clib] = ans[now][clib]+1
q.append((now-1, clib))
ans2 = ans[s]
ans2.sort()
cnt = 0
while 1:
if ans2[cnt] != -1:
print(ans2[cnt])
break
cnt += 1
728x90
반응형
'Problem Solving > 백준' 카테고리의 다른 글
[백준] 연속합 2(13398번) - 파이썬(Python) (0) | 2022.06.05 |
---|---|
[백준] 이분 그래프(1707번) - 파이썬(Python) (0) | 2022.06.05 |
배열 돌리기 3(16935번) - 파이썬(Python) (0) | 2022.06.05 |
주사위 굴리기(14499번) - 파이썬(Python) (0) | 2022.06.05 |
배열 돌리기 1(16926번) - 파이썬(Python) (0) | 2022.06.05 |