
KeyWord : Hash
- st.hasMoreTokens()
- for(Map.Entry<String, String> entry : song.entrySet())
이거에 얼른 익숙해지기..
Map의 메소드 얼른 익숙해지자.
해결방안
- 먼저 입력 값 정리
- 입력 받을 때, 글자 수는 변수에 안넣고, 계이름은 3개만 저장
- HashMap을 통해 Key, Value -> Key(곡이름), 계이름(3개)
- 그 값을 사용자가 아는지 모르는지 확인하기 위해, 배열을 통해 3개의 이름만 담는다.
그 값을 EntrySet으로 값 비교해서 1보다 크면 ?
1이면 노래제목
0이면 !
출력하게 했음.
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); //음을 아는 노래 int M = Integer.parseInt(st.nextToken()); //맞혀야하는 노래 Map<String, String> song = new HashMap<String, String>(); //여기서부터는 아는 노래 저장 for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine()); int T = Integer.parseInt(st.nextToken()); String S = st.nextToken(); String code = ""; for (int j = 0; j < 3; j++) { code += st.nextToken(); } song.put(S, code); } //여기서부터는 사용자 입력값 String[] q = new String[M]; for (int i = 0; i < M; i++) { int song_count = 0; String result =""; st = new StringTokenizer(br.readLine()); q[i] = ""; while (st.hasMoreTokens()) { q[i] += st.nextToken(); } for(Map.Entry<String, String> entry : song.entrySet()){ if(entry.getValue().equals(q[i])){ song_count++; if(song_count > 1){ result = "?"; }else if(song_count == 1){ result = entry.getKey(); } } if(song_count<1){ result= "!"; } } System.out.println(result); } } }