본문 바로가기
백준/이분탐색

[백준 1620번 / Java] 나는야 포켓몬 마스터 이다솜

by ghan2 2024. 5. 11.

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));
            }
        }
    }
}