이렇게 덩치가 커질 문제가 아닌거 같은데 아직 java 자료구조를 잘 사용하지 못하겠다.
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Vector;
public class bj31562 {
static Scanner scanner = new Scanner(System.in);
static Map<String, Vector<Character>> music;
static Vector<Vector<Character>> question;
public static void main(String[] args) {
inputData();
findAnswer();
}
public static void inputData()
{
music = new HashMap<>();
question = new Vector<>();
int length, N, M, i;
String title;
String syllable;
N = scanner.nextInt();
M = scanner.nextInt();
scanner.nextLine(); // 개행 처리
//음악 정보 입력
for(i = 0; i < N; i++)
{
Vector<Character> temp = new Vector<>();
length = scanner.nextInt();
title = scanner.next();
syllable = scanner.nextLine().trim(); // 음절 입력 (공백 제거)
String[] parts = syllable.split(" ");
for (String part : parts) {
temp.add(part.charAt(0));
}
music.put(title, temp);
}
//질문정보 입력
for(i = 0; i < M; i++)
{
Vector<Character> temp = new Vector<>();
syllable = scanner.nextLine().trim(); // 음절 입력 (공백 제거)
String[] parts = syllable.split(" ");
for (String part : parts) {
temp.add(part.charAt(0));
}
question.add(temp);
}
}
public static void findAnswer()
{
int i, j;
int count;
char a, b, c;
char A, B, C;
String answer = "";
for(i = 0; i < question.size(); i++)
{
count = 0;
a = question.get(i).get(0);
b = question.get(i).get(1);
c = question.get(i).get(2);
// Map에서 title(키)와 그에 대응하는 Vector<Character> 순회
for (Map.Entry<String, Vector<Character>> entry : music.entrySet()) {
Vector<Character> syllable = entry.getValue(); // 해당 음악의 음절 벡터 가져오기
A = syllable.get(0); // 첫 번째 음절
B = syllable.get(1); // 두 번째 음절
C = syllable.get(2); // 세 번째 음절
// 첫 3개의 문자가 질문의 a, b, c와 일치하는지 확인
if (a == A && b == B && c == C) {
count++;
if (count == 1) {
answer = entry.getKey(); // 첫 번째 일치하는 제목 저장
} else {
answer = "?"; // 두 번째 이상 일치하면 "?" 반환
break;
}
}
}
if (count == 0) {
answer = "!";
}
System.out.println(answer);
}
}
}