아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

오디세우스와 세이렌

면접 대비

시간 제한1초메모리 제한256 MB

요약
후보 조성마다 멜로디의 음표 벌점을 합산해 총점이 가장 작은 조성 번호를 출력합니다.
난이도

쉬움10점 중 2점

유형
구현, 문자열, 배열
정답자
아직 제출이 없습니다

문제

오디세우스는 호메로스의 서사시에 나오는 그리스 영웅이다. 트로이 전쟁이 끝난 뒤 그는 여러 해 동안 바다를 떠돌며 배가 부서지고 괴물과 싸웠다. 그 여정에서 널리 알려진 대목 하나가 세이렌의 섬을 지나는 장면이다. 세이렌의 노래를 들은 뱃사람은 예외 없이 바위 쪽으로 배를 돌렸고, 배는 바위에 부딪혀 가라앉았다. 키르케에게 경고를 들었지만 오디세우스는 그 노래가 궁금했다. 그래서 부하들에게 자신을 돛대에 단단히 묶게 하고, 부하들의 귀는 밀랍으로 막게 하고, 무슨 일이 있어도 자신을 풀어 주지 말라고 일렀다.

오디세우스가 세이렌의 노래를 그토록 듣고 싶어 한 이유 중 하나는 그 선율의 조성을 분석하고 싶었기 때문일 것이다. 음의 나열이 어느 조에 가장 잘 맞는지 찾는 프로그램을 써서 그를 돕자. 각 조에서 각 음이 얼마나 어울리는지를 벌점으로 나타낸 표가 주어진다. 이어서 선율이 여러 개 주어지고, 선율마다 가장 잘 맞는 조를 정해야 한다.

12개의 음은 순서대로 C, C#, D, D#, E, F, F#, G, G#, A, A#, B이다. 음마다 장조와 단조가 있고 선법도 있는데, 선법은 오디세우스의 시대에 더 흔했을 것이다. 조는 오로지 벌점 표로만 주어지므로 장조나 단조가 보통 어떤 모양인지 알 필요는 없다.

선율의 누적 벌점은 선율에 등장하는 음의 벌점을 등장 순서대로 모두 더한 값이다. 같은 음이 여러 번 나오면 나온 횟수만큼 더한다.

실제라면 곡 전체와 중간의 전조까지 함께 살펴야 하지만, 여기서는 그렇게까지 하지 않는다.

입력

첫 줄에 데이터 집합의 개수 KK가 주어진다. 이어서 KK개의 데이터 집합이 다음 형식으로 주어진다.

데이터 집합의 첫 줄에는 두 정수 nn과 mm이 공백 하나로 구분되어 주어진다 (1≤n,m≤1001 \le n, m \le 100). nn은 고를 수 있는 조의 개수이고, mm은 주어지는 선율의 개수이다.

다음 nn개의 줄에는 조가 하나씩 주어진다. 각 줄에는 실수 12개가 주어지며, 순서대로 C, C#, D, D#, E, F, F#, G, G#, A, A#, B를 그 조에서 보았을 때의 벌점이다.

다음 mm개의 줄에는 선율이 하나씩 주어진다. 선율은 길이가 100 이하인 문자열이고, 대문자와 # 기호로만 이루어진다. 공백은 없고, 위에서 말한 12개의 음만 나온다. 즉 E#이나 B# 같은 표기는 나오지 않는다.

출력

각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. xx는 그 데이터 집합의 번호이고 1부터 센다.

그다음 선율마다 누적 벌점이 가장 작은 조의 번호를 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다. 조의 번호는 입력에 나온 순서대로 1부터 nn까지이다. 가장 잘 맞는 조가 둘 이상인 경우는 없으므로 답은 항상 유일하다.

각 데이터 집합의 출력 뒤에 빈 줄을 하나 출력한다.

예제4

  1. 예제 1

    입력
    1
    3 2
    0 7.6 2.1 0.1 4.8 2.5 6.22 0.01 1.0 3.5 2.7172 1.4142
    3.14 1.5 0 10.2 2.0 8.421 0.1 0.3 4.6 0 7.4 4.2
    1.1 7.2 1.85 9.99 0 0.2 5.2 0.4 8.76 1.0 9.99 0.8
    AAACCGBAAACCGBA
    AAF#EDF#DC#BAGF#ED
    
    예상 출력
    Data Set 1:
    3
    2
    
  2. 예제 2

    입력
    1
    3 4
    2 0.1 2 0.2 2 2 0.3 2 0.4 2 0.5 2
    0.1 2 0.2 2 0.3 0.4 2 0.5 2 0.6 2 0.7
    1 1 1 1 1 1 1 1 1 1 1 1
    C#D#F#G#A#
    CDEFGAB
    B
    A#
    
    예상 출력
    Data Set 1:
    1
    2
    2
    1
    
    
  3. 예제 3

    입력
    1
    1 3
    0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
    C
    A#F#G#C#D#
    B
    
    예상 출력
    Data Set 1:
    1
    1
    1
    
    
  4. 예제 4

    입력
    2
    2 1
    0 0 0 0 0 0 5 5 5 5 5 5
    5 5 5 5 5 5 0 0 0 0 0 0
    CDEF
    2 2
    0 0 0 0 0 0 5 5 5 5 5 5
    5 5 5 5 5 5 0 0 0 0 0 0
    GAB
    C#D#E
    
    예상 출력
    Data Set 1:
    1
    
    Data Set 2:
    2
    1