Keep Going

빠르지 않아도 꾸준히

백준/Silver

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

금동진 2025. 8. 27. 10:14

아이디어

문제가 엄청 길어서 열심히 봤는데 그냥 프롤로그였다...

처음에는 HashMap만 이용해서 풀려 했는데, Value로 Key를 찾으려면 O(n) 순회를 해야해서 시간이 걸리더라

그래서 HashMap<String, Integer> name2num와 String[] num2name을 이용해서

입력이 이름이면 Map, 정수면 배열을 사용하여 조회하게 했다.

클래스 연습한다고 클래스로 만들었는데, 좀 더 복잡해진 것 같긴 하다.

 

이를 코드로 구현하면 다음과 같다.

import java.io.*;
import java.util.HashMap;

public class N1620 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input =  br.readLine().split(" ");
        int N =  Integer.parseInt(input[0]);
        int M =  Integer.parseInt(input[1]);

        PMonCollection newDogam= new PMonCollection();
        newDogam.insertCollection(N, br);
        newDogam.test(M, br);
    }
}

class PMonCollection {
    private HashMap<String, Integer> name2num = new HashMap<>();
    private String[] num2name;

    PMonCollection() {}

    public void insertCollection (int N, BufferedReader br) throws IOException {
        num2name = new String[N + 1];
        for (int i = 1; i <= N; i++) {
            String name = br.readLine();
            num2name[i] = name;
            name2num.put(name, i);
        }
    }

    public void test (int M, BufferedReader br) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for  (int i = 1; i <= M; i++) {
            String input = br.readLine();
            if (input.matches("[a-zA-Z]+")) {
                bw.write(String.valueOf(name2num.get(input)) + '\n');
            } else {
                bw.write(num2name[Integer.parseInt(input)] + '\n');
            }
        }
        bw.flush();
    }
}

 


아직 초보라 많이 서툴고 틀린 부분이 있을 수 있습니다. 고수분들께서 조언해주실만한 사항이 있으면 감사히 받겠습니다.