26개의 포켓몬 도감을 만들고 각각의 번호와 이름을 자유롭게 가져올 수 있는 코드를 작성해야 한다.
처음에는 배열에 스트링 값을 넣어서 정렬할까 했지만 그렇게 되면 순서 번호를 가져올 수 없다는 문제가 있었다
숫자로 빠르게 찾아올 수 있도록 순서대로 넣은 배열,
이름값으로 빠르게 찾아오기 위한 맵 도감을 하나 만들어서 해결했다.
맵은 레드 블랙 트리로 구현되어 있기 때문에 삽입, 삭제 시에 시간복잡도 O(logN)을 가진다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
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());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String[] dict = new String[N+1];
Map<String, Integer> map = new HashMap<>();
for(int i = 1; i <= N; i++) {
dict[i] = br.readLine();
map.put(dict[i], i);
}
for(int i = 0; i < M; i++) {
String word = br.readLine();
try {
int number = Integer.parseInt(word);
System.out.println(dict[number]);
} catch (NumberFormatException e) {
System.out.println(map.get(word));
}
}
}
}