Java/Baekjoon

[Baekjoon] 1620번 나는야 포켓몬 마스터 이다솜 (Java)

다콩잉 2022. 10. 2. 20:20

처음에 HashMap만 사용해서 value값으로 key값을 찾으려다 보니 반복문을 너무 많이 돌려서 시간 초과가 났다.

이를 해결하기 위해서 String 배열을 만들어서 숫자로 포켓몬 이름을 물어볼 경우

해당 인덱스에서 포켓몬 이름을 찾아냈더니 시간 초과가 해결되었다.

 

예제 입력

26 5
Bulbasaur
Ivysaur
Venusaur
Charmander
Charmeleon
Charizard
Squirtle
Wartortle
Blastoise
Caterpie
Metapod
Butterfree
Weedle
Kakuna
Beedrill
Pidgey
Pidgeotto
Pidgeot
Rattata
Raticate
Spearow
Fearow
Ekans
Arbok
Pikachu
Raichu
25
Raichu
3
Pidgey
Kakuna

예제 출력1

Pikachu
26
Venusaur
16
14

 

 

import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String[] num = scan.nextLine().split(" ");
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        StringBuilder sb = new StringBuilder();
        String[] arr = new String[Integer.parseInt(num[0])+1];  // 포켓몬 번호는 1부터 시작하기 때문에 크기를 1늘림
        for(int i = 0; i < Integer.parseInt(num[0]); i++){
            String str = scan.nextLine();
            arr[i+1] = str;                                 // 포켓몬 번호는 1부터 시작하기 때문에 +1
            map.put(str, i+1);
        }
        for(int i = 0; i < Integer.parseInt(num[1]); i++){
            String str = scan.nextLine();
            if(Character.isDigit(str.charAt(0))){   // 첫 번째 글자가 숫자인지 아닌지 확인
                // 숫자면 인덱스를 이용해서 배열에서 찾아냄
                sb.append(arr[Integer.parseInt(str)]).append("\n");
            }else{
                // 문자일 경우에는 HashMap의 key(포켓몬 이름)로 value(번호)를 찾아냄
                sb.append(map.get(str)).append("\n");
            }
        }
        System.out.println(sb);
    }
}
728x90