본문 바로가기
java

백준 1620 나는야 포켓몬 마스터 이다솜 자바 java

by MiaCoder 2024. 1. 23.

이 문제는 앞서 본 문제와 비슷하게 HashMap를 사용하여 풀지만, 특이점이 있다.

 

이 문제는 key값을 통해 value값을 조회하기도 하고, value값을 통해 key 값을 조회하기도 한다.

 

하지만 HashMap는 value값을 통해 key값을 조회하는 것을 지원하지는 않는다.

 

이 경우 두 개의 HashMap를 사용함으로써 우리는 간단하게 해결할 수 있다.

 

import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st;

        st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        // N, M 읽기

        HashMap<Integer, String> map = new HashMap<>();
        HashMap<String, Integer> map2 = new HashMap<>();
        // 두 개의 HashMap를 등록한다. 하나는 순번에 따라 포겟몬 이름을 반환하고,
        // 나머지 하나는 포켓몬 이름에 따라 순번을 반환한다.

        for (int i = 0; i < N; i++) {
            String pocketMon = br.readLine();
            map.put(i + 1, pocketMon);
            map2.put(pocketMon, i + 1);
        }
        //반복문을 통해 map, map2에 모두 값을 채워준다. 순번이 1부터 시작하므로 i + 1을 사용한다.

        for (int i = 0; i < M; i++) {

            String readM = br.readLine();

            if (isInt(readM)) {
            	//정수인지 판별하기 위해 간단한 메소드를 작성한다.
                
                System.out.println(map.get(Integer.parseInt(readM)));
            } else {
                System.out.println(map2.get(readM));
            }
        }

        br.close();

    }

    private static boolean isInt(String str) {
    	//정수인지 판별하는 메소드이다.
        
        try {
            Integer.parseInt(str);
            // if문에서는 String타입으로 읽어온다. 따라서 정수형으로 변환한다.
            // 변환이 될 경우 정수라고 볼 수 있고 true를 반환한다.
            return true;
            
        } catch (NumberFormatException e) {
            return false;
            //만약 변환이 되지 않는다면 다른 타입이다. 이 경우 false를 반환한다.
        }
    }
}