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

이다혜·2024년 2월 7일
0

백준

목록 보기
20/29

📎 문제 출처


https://www.acmicpc.net/problem/1620

📌 문제 설명


❓ 풀이 방법


처음에는 HashMap을 한개 만들어서 <포켓몬 번호, 포켓몬 이름>을 저장했다.
문제가 번호로 주어지면 map.get(key)로 이름을 불러오면 됐지만,
문제가 이름으로 주어지면 어떻게 해야할지 고민하다가 entrySet을 사용했다.

		for(int i = 0; i < m; i++) {
            String str = br.readLine();
            if(str.matches("^[0-9]*$")) {
                sb.append(map.get(Integer.parseInt(str)) + "\n");
            } else {
                for(Map.Entry<Integer, String> entry : map.entrySet()) {
                    Integer key = entry.getKey();
                    String value = entry.getValue();
                    if(str.equals(value)) {
                        sb.append(key + "\n");
                    }
                }
            }
        }

하지만 이렇게 되면 2중 for문을 사용해서 시간 초과가 나왔다.

그래서 찾은 방법은 HashMap을 2개를 둬서 하나는 <번호, 이름>으로 저장하고 하나는 <이름, 번호>로 저장하는 것이다.

이렇게 되면 문제가 번호로 주어져도, 이름으로 주어져도 상관없이 map.get()으로 답을 얻을 수 있다.

📌 Code


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

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

        HashMap<Integer, String> map1 = new HashMap<>();
        HashMap<String, Integer> map2 = new HashMap<>();
        
        for(int i = 0; i < n; i++) {
            String name = br.readLine();
            map1.put(i+1, name);
            map2.put(name, i+1);
        }

        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i < m; i++) {
            String prob = br.readLine();
            if(prob.matches("^[0-9]*$")) {
                sb.append(map1.get(Integer.parseInt(prob)) + "\n");
            } else {
                sb.append(map2.get(prob) + "\n");
            }
        }
        
        System.out.println(sb.toString());
    }
}

0개의 댓글