https://www.acmicpc.net/problem/11058
크리보드는 kriii가 만든 신기한 키보드이다. 크리보드에는 버튼이 4개만 있으며, 하는 역할은 다음과 같다.
- 화면에 A를 출력한다.
- Ctrl-A: 화면을 전체 선택한다
- Ctrl-C: 전체 선택한 내용을 버퍼에 복사한다
- Ctrl-V: 버퍼가 비어있지 않은 경우에는 화면에 출력된 문자열의 바로 뒤에 버퍼의 내용을 붙여넣는다.
크리보드의 버튼을 총 N번 눌러서 화면에 출력된 A개수를 최대로하는 프로그램을 작성하시오.
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
크리보드의 버튼을 총 N번 눌러서 화면에 출력할 수 있는 A 개수의 최댓값을 출력한다.
복사 붙여넣기를 하려면 최소 3번의 버튼이 필요하다.
=>Ctrl-A, Ctrl-C, Ctrl-V
- 1번부터 6번까지는 각 수와 같음
ex)6번 누를수 있는 경우
=>1.1) 그냥 6번 누른다 =>6번
=>1.2) 3번 누른 후 Ctrl-A, Ctrl-C, Ctrl-V =>6번
- 7이상인 경우에는 큰 값을 찾아야 함
ex)7인 경우,
복사 붙여넣기를 하려면 최소 3개 필요2.1) 복붙을 한 번만 하는 경우 => data[7-3]*2
=> 7번 중에서 복붙할 3번의 경우를 뺀 후, 복붙을 했으므로 숫자는 2배가 됨
2.2) 복붙을 두 번 하는 경우 = data[7-4]*3
=>7번 중에서 복붙할 3번의 경우를 빼고, 붙여넣기 할 1번을 더 뺌
=>붙여넣기를 2번 했으므로 3배가 됨
2.3) 복붙을 세 번 하는 경우 = data[7-5]*4
=>7번 중에서 복붙할 3번의 경우를 빼고, 붙여넣기 할 2번을 더 뺌
=>붙여넣기를 3번 했으므로 4배가 됨2.1, 2.2, 2.3 중에 가장 큰 값을 찾음
=>data[i]=max(data[i-3]2, data[i-4]3, data[i-5]*4)
num =int(input()) data=[i for i in range(num+1)] for i in range(7,num+1): data[i]=max(data[i-3]*2, data[i-4]*3, data[i-5]*4) print(data[num])