만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

회문 수열 만들기

면접 대비

시간 제한3초메모리 제한1024 MB

요약
주어진 정수 수열이 앞뒤로 같게 읽히도록 삽입해야 하는 최소 정수 개수를 구합니다.
난이도

보통10점 중 4점

유형
동적 계획법, 배열
정답자
아직 제출이 없습니다

문제

회문 수열은 앞에서 읽어도 뒤에서 읽어도 같은 수열, 즉 {a1, a2, a3, ..., a3, a2, a1} 꼴의 수열이다. 예를 들어 {78, 91, 78}, {100}, {10, 20, 20, 10}, {5, 5, 5, 5}는 회문 수열이다. 하지만 {1, 2, 3, 1}과 {10, 20}은 회문 수열이 아니다.

정수 수열이 주어진다. 삽입을 여러 번 수행해서 이 수열을 회문 수열로 바꾸려고 한다. {1, 2, 3, 1}은 네 번째 위치에 2를 삽입하면 {1, 2, 3, 2, 1}이 되어 회문 수열이 된다. {10, 20}은 첫 번째 위치에 20을 삽입하거나 마지막 위치에 10을 삽입하면 회문 수열이 된다.

주어진 정수 수열을 회문 수열로 만드는 데 필요한 최소 삽입 횟수를 구하라. 결과(삽입 횟수)는 항상 100보다 작다고 보장된다.

입력

첫 줄에는 검사할 정수 수열의 개수 n이 양의 정수로 주어진다. 이후 2n개의 줄에 수열이 하나당 두 줄씩 주어진다. 각 수열의 첫 줄에는 수열의 크기 s (1 ≤ s ≤ 10,000)가 주어지고, 둘째 줄에는 공백 한 칸으로 구분된 s개의 정수가 주어진다. 수열의 각 정수는 1 이상 50 이하이다.

출력

각 수열에 대해 먼저 "Sequence #i: "를 출력한다. 여기서 i는 1부터 시작하는 수열 번호이다. 이어서 수열을 회문 수열로 만드는 데 필요한 최소 삽입 횟수를 정수 하나로 출력한다. 각 테스트 케이스의 출력 뒤에는 빈 줄을 하나 남긴다. 출력 형식은 예제 출력을 따른다.

예제1

  1. 예제 1

    입력
    3
    4
    1 2 3 1
    4
    1 2 3 4
    3
    1 2 1
    
    예상 출력
    Sequence #1: 1
    
    Sequence #2: 3
    
    Sequence #3: 0