Algorithm/백준

[백준]1620 - 나는야 포켓몬 마스터 이다솜 문제 풀이(Java,자바)

나맘임 2025. 1. 7. 13:36

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

 

들어가며

그림 1. 실질적인 문제가 있는 곳

 

이 문제는 앞에 다 필요없고 입력이란 출력란만 보면 문제를 풀 수 있다.

이름을 주면 번호를, 번호를 주면 해당하는 이름을 출력해야 한다.

어렵게 생각하지 않고 메모리도 2MB로 널널하기 때문에 HashMap을 두 개 사용하는 방식으로 접근했다.

 

코드

public class 백준1620_포켓몬마스터이다솜 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String[] input = reader.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);

        HashMap<String, Integer> nameDictionary = new HashMap<>();
        HashMap<Integer, String> numberDictionary = new HashMap<>();
        for (int i = 1; i <= n; i++){
            String pokemonName = reader.readLine();
            nameDictionary.put(pokemonName,i);
            numberDictionary.put(i,pokemonName);
        }

        for (int i = 0; i <m; i++){
            String question = reader.readLine();
            if (Character.isDigit(question.charAt(0))){
                System.out.println(numberDictionary.get(Integer.parseInt(question)));
                continue;
            }
            System.out.println(nameDictionary.get(question));
        }
    }
}

풀이법

이름을 주면 번호를, 번호를 주면 해당하는 이름을 출력해야하기 때문에, HashMap을 두 개 만든다.

그렇게 사전 데이터 초기화를 해주고 다음으로 중요한 건 " 어떻게 String이 숫자인지 인식할 것인가??" 이다.

자바엔 Character.isDigit이라는 함수가 있다.

char 데이터가 숫자인지 확인해주는 함수인데, 이를 조금 이용해서 String의 첫 번째 문자가 숫자인지 아닌지를 파악한다.

이 문제에선 포켓몬 이름엔 영어밖에 없기 때문에 이 방식으로 숫자인지 아닌지 파악이 가능하다.

따라서 숫자라면 영어 이름을 꺼내도록하고 이름이면 숫자를 꺼낼 수 있게 된다.

 

그렇다면 String 전체가 숫자인지 파악하는 방법이 뭐가 있을까??

여기에서 정규 표현식을 외워두면 좋다.

boolean isNumeric = str.matches("-?\\d+");

 

-? : 음수 허용

//d+ : 하나이상의 숫자

 

이를 통해 숫자인지 파악도 가능하다.