본문 바로가기

WEB/Algorithm

백준 1620

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

 

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

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

www.acmicpc.net

<문제 요약>

N과 M 입력

N번의 입력에선 N개의 포켓몬이 입력되고 (입력 순서대로 번호 지정)

그 후 M번의 입력에서는 번호나 포켓몬 이름이 입력되는데 해당되는 번호나 포켓몬 이름을 출력

 

<문제 풀이>

 

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

public class P1620 {

    static int N;
    static int M;
    static Map<String,Integer> nameMap=new HashMap<>();
    static Map<Integer,String> indexMap=new HashMap<>();


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());


        for (int i = 0; i < N; i++) {
            String name = br.readLine();
            nameMap.put(name,i+1);
            indexMap.put(i+1,name);
        }

        StringBuilder sb = new StringBuilder();
        while (M-- > 0) {
            String input = br.readLine();
            if(nameMap.containsKey(input)){
                sb.append(nameMap.get(input)).append("\n");
            }else{
                sb.append(indexMap.get(Integer.parseInt(input))).append("\n");
            }
        }
        System.out.println(sb);

    }


}

 

문제가 너무 길어서 당황할 수 있는데 입력 부분의 글만 읽어도 된다.

HashMap을 사용했는데 어떻게 value에 접근할까 고민하다가 그냥 HashMap을 두개 만들면 된다는 것을 깨달았다 ..

그럼 간단히 풀린다!

 

HashMap은 

정렬에 무관하게 빠른 접근을 원하면 강추 

'WEB > Algorithm' 카테고리의 다른 글

Stack  (0) 2024.02.07
백준 17103  (1) 2023.11.27
백준 15652  (1) 2023.11.24
백준 15651  (0) 2023.11.24
백준 24060  (1) 2023.11.22