1+ """
2+ https://www.acmicpc.net/problem/14226
3+ # 이모티콘 / 골드 4
4+ # goal ) 화면에 S개 이모티콘 만드는데 드는 최소시간 구하기
5+ - 3가지 작업(1sec)로 화면 1개 -> S 개
6+ (1) 화면 속 모든 이모티콘 -> 클립보드에 "복사" <덮어쓰기 - ctrl+c>
7+ (2) 클립보드 속 모든 이모티콘 -> 화면에 "붙여넣기" <추가- ctrl+v>
8+ - 클립보드가 반드시 비어있지 않아야 붙여 넣기 가능
9+ - 클립 보드 속 이모티콘은 일부만 삭제 , 복사 불가
10+ - 붙여넣기 시, 클립보드에 있는 이모티콘 개수가 화면에 추가됨
11+ (3) 화면 속 이모티콘 1개 삭제 <삭제 - delete>
12+ # FLOW : BFS
13+ i.
14+ field = [screen : 화면 속 이모티콘 개수 , Backup: 클립보드 속 이모티콘 개수]
15+ ii. 3가지 작업
16+ [copy]
17+ - Bacup[i] = Screen[i-1] 개수
18+ [put]
19+ if backup[i-1] !=0
20+ - screen[i] = backup[i-1] + screen[i-1]
21+ [delete]
22+ - screen[i] = screen[i-1]
23+ """
24+ import sys
25+ from collections import deque
26+ input = sys .stdin .readline
27+
28+ S = int (input ())
29+ visited = [[False ]* 1002 for _ in range (1002 )]
30+ visited [1 ][0 ] = True # visited [screen 개수][클립보드 개수] 조합 시 방문 여부 T/F
31+
32+ q = deque ([[1 ,0 ,0 ]]) # screen 개수
33+ # 3가지 각 종류의 작업 이후 화면 속 & 클립보드 속 이모티콘 개수
34+ def function (num , screen , backup ):
35+ if num == 0 : # copy
36+ return screen , screen
37+ elif num == 1 : # put
38+ return screen + backup , backup
39+ elif num == 2 : # delete
40+ return screen - 1 , backup
41+ # 2. BFS 작업
42+ while q :
43+ cs , cb , ct = q .popleft ()
44+ # 목표 달성시-> 끝내기
45+ if cs == S :
46+ break
47+ if cb == 0 :
48+ next_f = [0 ,2 ]
49+ else :
50+ next_f = [0 ,1 ,2 ]
51+
52+ for d in next_f :
53+ ns , nb = function (d , cs , cb )
54+ nt = ct + 1
55+ #BFS 화면 적합성
56+ if 1 <= ns <= 1001 and not visited [ns ][nb ] :
57+ q .append ([ns , nb , nt ])
58+ visited [ns ][nb ] = True
59+
60+ print (ct )
0 commit comments