HashMap 은 key 값의 hashCode 를 index 로 Array 에 값을 저장하기 때문에 문자열을 검색하는 속도가 빠릅니다.
그래서 value 값으로 검색하지 않고 key 값으로 검색해야 시간 초과가 나지 않습니다.
다른 방법으로는 같은 HashMap 에 (String, Integer) (Integer, String) 같이 순서를 바꿔서 같은 값을 집어넣으면 한 개의 HashMap 으로 해결 가능합니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = null;
HashMap<String, Integer> string = new HashMap<>();
HashMap<Integer, String> integer = new HashMap<>();
//첫 줄 두 숫자 받기
int[] num = new int[2];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 2; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
//for문 돌면서 순서 값, 단어 HashMap에 저장
for (int i = 1; i <= num[0]; i++) {
String tmp = br.readLine();
string.put(tmp, i);
integer.put(i, tmp);
}
for (int i = 0; i < num[1]; i++) {
String tmp = br.readLine();
if (string.containsKey(tmp)) //문자열 키
bw.write(string.get(tmp) + "\n");
else// 숫자 값
bw.write(integer.get(Integer.parseInt(tmp)) + "\n");
}
bw.flush();
}
}