친구에게 전화를 걸어야하지만 무선 전화기의 버튼이 제대로 작동하지 않습니다. 누를 수있는 유일한 버튼은 [위로], [아래로] 및 [통화]입니다. [위로] 및 [아래로]를 사용하여 최근 통화를 탐색하고 [통화]를 사용하여 선택한 이름으로 전화를 걸 수 있습니다. 내 전화에는 N최근 통화 가 포함 된 목록이 있으며 전화해야하는 모든 친구가이 목록에 있음을 알고 있습니다.
직무:
당신은 숫자 N와 이름의 목록을 받게 됩니다 L:
N내 전화가 기억할 수있는 최근 통화 수입니다.L전화해야 할 순서대로 이름이 있습니다.
최근 통화 목록을 최적으로 배열하기 위해 필요한 버튼 누름 수를 출력해야합니다.
예:
-> 입력 :
Anna, Bob, Anna에게 다시 전화하십시오. 크기가 5 인 최근 통화 목록
5
Anna
Bob
Anna
-> 출력 :
가능한 최적 배열 : Anna, Foo, Bar, Foobar, Bob
5 # Key presses: [Call] Anna, [Up] + [Call] Bob, [Down] + [Call] Anna
더 많은 테스트 사례 :
Input: 5, Anna, Bob, Carl
Output: 5
Input: 5, Anna, Bob, Carl, Anna
Output: 8
Input: 5, A, B, C, D, E, A
Output: 11
Input: 6, A, B, C, D, E, A
Output: 12
Input: 4, A, B, C, B, A
Output: 10
규칙 :
- 커서는 항상 목록의 첫 번째 위치에서 시작합니다.
- 당신은 입력을 취할 수
N및L모든 소스 : 키보드, 매개 변수, 파일 등; - 목록의 이름은 다음과 같은 합리적인 형식 일 수 있습니다. 문자열, 정수, 문자;
- 최근 통화 목록의 끝에 도달하고 [아래로]를 다시 누르면 커서가 줄 바꿈됩니다. 최근 통화 목록을 시작할 때 [위로]를 누를 때도 마찬가지입니다.
- 누군가에게 전화를 걸면 그 사람의 이름이 최근 통화 목록의 첫 번째 위치로 이동하고 나머지는 푸시 다운됩니다.
- 누군가에게 전화하면 커서가 첫 번째 위치로 이동합니다.
- 최근 통화 목록에 친구 이름이 두 번 이상 나타날 수 없습니다.
- 최근 통화 목록을 더미 항목으로 채울 수 있습니다 (예 참조).
- 전화를 거는 친구의 수는 개를 초과하지 않습니다
N.