문제 풀이/백준

[백준]1620번. 나는야 포켓몬 마스터 이다솜(JAVA)

27200 2024. 4. 4. 15:24

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


풀이

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

public class Main {
    public static void main(String[] args) throws IOException {
        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());

        HashMap<String, String> name = new HashMap<>();
        HashMap<String, String> number = new HashMap<>();

        for(int i = 1; i < n+1; i++){
            String temp = br.readLine();
            name.put(temp, Integer.toString(i));
            number.put(Integer.toString(i), temp);
        }

        for(int i = 0; i < m; i++){
            String test = br.readLine();
            if(name.containsKey(test)){
                System.out.println(name.get(test));
            }else{
                System.out.println(number.get(test));
            }

        }
    }
}

 

기본적으로 들어온 입력에 대한 저장과, 탐색이 매우 중요한 문제라고 생각했다.

 

포켓몬 도감이 순차적으로 들어오는데 이때 값만 들어옴에도 번호를 갖고 있다. 따라서 해쉬맵이 적당한 자료구조라고 생각했다.

문제는 이 경우 검색을 키로도 해야 하고, 값으로도 해야 한다. 하지만 해쉬맵의 경우 키-> 값을 위한 자료구조이기 때문에 입력과 동시에 두 가지 방식 모두 저장하는 것으로 했다.

 

또한 입력을 받아서 string 으로 변환할지 혹은 검색할 때 이름이 아닌 번호가 들어왔다면 이것을 정수형으로 바꿔서 검색할지는 무엇이 더 좋은 것인지 더욱 공부해보고 조금이라도 효율적인 방법을 찾아야 할 것 같다.

 

또한, 문제를 잘 읽는 습관은 역시 중요하다!!!

왜냐면 습관적으로 for(int i = 0; i < n; i++)로 받는 경향이 있다. 하지만 이 문제에서도 포켓몬 도감의 인덱스는 0이 아닌 1부터 시작하기 때문에 이를 고려해야 한다.