[BOJ] 31562. 전주 듣고 노래 맞히기 (java)

 

 

#문자열  #해시맵   #구현

 

 

시작에서부터 세 음만 볼 것이기 때문에 음의 개수나 3개 이후의 음은 볼 필요가 없다.

시작 세 음을 키로 사용한 해시맵을 만든다.

이때 처음 등장하는 음의 배열을 저장할 때는 값을 노래 제목으로 하고, 두번째 등장하면 키에 해당하는 값을 ?로 대체해준다.

이후 맞힐 음이 등장하면 그 음의 배열을 키로 해시맵에서 찾아서 출력하고 값이 없으면 !를 출력한다.

 

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws IOException {
		Scanner scanner = new Scanner(System.in);
		
		HashMap<String, String> map = new HashMap<>();
		
		int N = scanner.nextInt(); // 아는 노래의 개수
		int M = scanner.nextInt(); // 맞히기 시도 노래 개수
		scanner.nextLine();
	    
	    for (int i = 0; i < N; i++) {
	        String line = scanner.nextLine();
	        String[] parts = line.split(" ");
	        String title = parts[1];
	        String start = parts[2].concat(parts[3]).concat(parts[4]);
	        
	        if (map.get(start) != null) {
	            map.put(start, "?");
	        } else {
	            map.put(start, title);
	        }
	    }
	    
	    for (int i = 0; i < M; i++) {
	        String line = scanner.nextLine().replace(" ", "");;
	        if (map.get(line) != null) {
	            System.out.println(map.get(line));
	        } else {
	            System.out.println("!");
	        }
	    }
	}
	
	
}