[BOJ]#11058 크리보드 Python

현지·2021년 5월 14일
0

BOJ

목록 보기
15/44

문제

https://www.acmicpc.net/problem/11058

크리보드는 kriii가 만든 신기한 키보드이다. 크리보드에는 버튼이 4개만 있으며, 하는 역할은 다음과 같다.

  1. 화면에 A를 출력한다.
  2. Ctrl-A: 화면을 전체 선택한다
  3. Ctrl-C: 전체 선택한 내용을 버퍼에 복사한다
  4. Ctrl-V: 버퍼가 비어있지 않은 경우에는 화면에 출력된 문자열의 바로 뒤에 버퍼의 내용을 붙여넣는다.

크리보드의 버튼을 총 N번 눌러서 화면에 출력된 A개수를 최대로하는 프로그램을 작성하시오.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

크리보드의 버튼을 총 N번 눌러서 화면에 출력할 수 있는 A 개수의 최댓값을 출력한다.

아이디어

복사 붙여넣기를 하려면 최소 3번의 버튼이 필요하다.
=>Ctrl-A, Ctrl-C, Ctrl-V

  1. 1번부터 6번까지는 각 수와 같음
    ex)6번 누를수 있는 경우
    =>1.1) 그냥 6번 누른다 =>6번
    =>1.2) 3번 누른 후 Ctrl-A, Ctrl-C, Ctrl-V =>6번

  2. 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)

내 코드(Python)

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])

0개의 댓글