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

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

 

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

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

www.acmicpc.net


N개의 줄에 1~N 번의 포켓몬들이 입력된다.
문제 M개가 주어진다.
포켓몬 이름이 주어지면 번호를 말하고, 번호가 주어지면 포켓몬을 말한다.
N의 범위가 1~100,000 이기에
  - 배열 사용시 숫자에 대응되는 포켓몬을 찾는것은 빠를 수 있어도
  - 포켓몬이 위치한 인덱스를 찾는 것은 O(N)의 시간복잡도로 인해 비효율적이다.
이를 해결하기 위해 String 배열과 MashMap<String, Integer> 를 함께 사용한다.

1. HashMap<String, Integer> pMap 와 String[N+1] pArr 을 만든다.
2. N 줄 동안 입력 put(포켓몬이름, 번호), pArr[1~N] = 포켓몬이름
3. M 줄 동안 출력
    - String 포켓몬이름 입력받을 경우 -> get(포켓몬이름)
    - int 번호 입력받을 경우 -> pArr[번호] = 포켓몬이름

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));
        StringBuilder sb = new StringBuilder();
        StringTokenizer stk = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(stk.nextToken());
        int M = Integer.parseInt(stk.nextToken());

        HashMap<String, Integer> pMap = new HashMap<>();
        String[] pArr = new String[N+1];

        for(int i=1; i<=N; i++){
            String pName = br.readLine();
            pMap.put(pName, i);
            pArr[i] = pName;
        }

        for(int i=0; i<M; i++){
            String input = br.readLine();
            boolean isNumber = true;
            for(char x : input.toCharArray()){
                if(!Character.isDigit(x)){
                    isNumber = false;
                    break;
                }
            }
            if(isNumber){
                sb.append(pArr[Integer.parseInt(input)] + "\n");
            }else{
                sb.append(pMap.get(input) + "\n");
            }
        }

        System.out.println(sb);
    }
}

'Solved > BOJ' 카테고리의 다른 글

[백준 1912] 연속합  (0) 2023.05.02
[백준 10816] 숫자 카드 2  (0) 2023.04.30
[백준 11286] 절댓값 힙  (0) 2023.04.28
[백준 1927] 최소 힙  (0) 2023.04.28
[백준 1464] 뒤집기 3  (0) 2023.04.26