본문 바로가기
Java/알고리즘

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

by WaterPunch 2022. 10. 20.
 

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

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

이번문제는 HashMap을 사용하여 key값으로 value를 찾도록 하는 문제다

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class PocketmonMaster {
    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());

        // int를 Key값으로 저장하는 HashMap과
        // String을 Key값으로 저장하는 HashMap을 각각 하나씩 생성해준다
        HashMap<String, Integer> stringKeyList = new HashMap<String, Integer>();
        HashMap<Integer, String> intKeyList = new HashMap<Integer, String>();

        for(int i=1; i<=N; i++) {
            String s = br.readLine();
            stringKeyList.put(s, i);
            intKeyList.put(i, s);
        }

        StringBuilder sb = new StringBuilder();
        for(int i=0; i<M; i++) {
            String temp = br.readLine();
            // 입력받은 값이 숫자라면 intKeyList에서 탐색
            // 입력받은 값이 문자라면 stringKeyList에서 탐색
            if(isNumberic(temp)) {
                sb.append(intKeyList.get(Integer.parseInt(temp))).append("\n");
            } else {
                sb.append(stringKeyList.get(temp)).append("\n");
            }
        }
        br.close();
        System.out.println(sb);

    }

    public static boolean isNumberic(String s) {
        try{
            // 들어온 값이 숫자가 아니라면 NumberFormatException이 발생하면서
            // 아래에 작성한 catch 문으로 넘어가면서 false를 return한다
            Double.parseDouble(s);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
반응형

댓글