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

dustle·2023년 3월 15일
1

나는야 포켓몬 마스터 이다솜

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

0개의 댓글