

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
//포켓몬 도감
String[] pocketmonName = new String[N];
//포켓몬 도감 만들기
for(int i=0; i<N; i++) pocketmonName[i] = br.readLine();
//포켓몬 문제 풀기
//숫자 -> 그에 해당하는 포켓몬 이름 출력, 글자 -> 그에 해당하는 포켓몬 숫자 출력
for(int i=0; i<M; i++) {
String input = br.readLine();
char ch = input.charAt(0); //
if(Character.isDigit(ch)) { //숫자라면
int num = Integer.parseInt(input);
sb.append(pocketmonName[num-1]).append("\n"); //포켓몬 이름 넣기
}
else{ //글자라면
int count = 1;
for(String str : pocketmonName) {
if(str.equals(input)) sb.append(count).append("\n");
count++;
}
}
}
br.close();
//결과 출력
System.out.println(sb);
}
}
그래서 고민해보면서 HashMap을 사용해야겠다고 생각하였고,
HashMap을 하나만 두게 되면 배열 선언한 것과 똑같은 방법이기 때문에 다시 시간초과가 날 것이라고 생각하였다.
그래서 HashMap을 두개 선언하여 '숫자'입력이 들어오면 문자를 찾아내는 Map 한개,
'문자'입력이 들어오면 숫자를 찾아내는 Map 한개, 총 두 개의 Map을 선언하여 문제 풀이를 하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
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());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
HashMap<Integer, String> NumToWord = new HashMap<>(); //숫자로부터 이름 알아내기
HashMap<String, Integer> WordToNum = new HashMap<>(); //이름으로부터 숫자 알아내기
//포켓몬 도감 만들기
for(int i=1; i<=N; i++) {
String pocketmonName = br.readLine();
NumToWord.put(i, pocketmonName);
WordToNum.put(pocketmonName, i);
}
//포켓몬 문제 풀기
for(int i=0; i<M; i++) {
String input = br.readLine();
if(Character.isDigit(input.charAt(0))) { //숫자라면 -> 그에 해당하는 포켓몬 이름 출력
int num = Integer.parseInt(input);
sb.append(NumToWord.get(num)).append("\n"); //포켓몬 이름 넣기
}
else{ //글자라면 -> 그에 해당하는 포켓몬 숫자 출력
sb.append(WordToNum.get(input)).append("\n");
}
}
//결과 출력
System.out.println(sb);
}
}
