본문 바로가기
공부/알고리즘

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

by 미네밍 2016. 11. 4.

문제

오박사 : 그럼 다솜아 이제 진정한 포켓몬 마스터가 되기 위해 도감을 완성시키도록 하여라. 일단 네가 현재 가지고 있는 포켓몬 도감에서 포켓몬의 이름을 보면 포켓몬의 번호를 말하거나, 포켓몬의 번호를 보면 포켓몬의 이름을 말하는 연습을 하도록 하여라. 나의 시험을 통과하면, 내가 새로 만든 도감을 주도록 하겠네.

입력

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

둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓몬의 이름은 모두 영어로만 이루어져있고, 또, 음... 첫 글자만 대문자이고, 나머지 문자는 소문자로만 이루어져 있어. 포켓몬 이름의 최대 길이는 20이야. 그 다음 줄부터 총 M개의 줄에 내가 맞춰야하는 문제가 입력으로 들어와. 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력해야해. 입력으로 들어오는 숫자는 반드시 1보다 크거나 같고, N보다 작거나 같고, 입력으로 들어오는 문자는 반드시 도감에 있는 포켓몬의 이름만 주어져. 그럼 화이팅!!!

출력

첫째 줄부터 차례대로 M개의 줄에 각각의 문제에 대한 답을 말해줬으면 좋겠어!!!. 입력으로 숫자가 들어왔다면 그 숫자에 해당하는 포켓몬의 이름을, 문자가 들어왔으면 그 포켓몬의 이름에 해당하는 번호를 출력하면 되. 그럼 땡큐~

예제 입력 

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

예제 출력 

Pikachu
26
Venusaur
16
14

[코드]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.util.HashMap;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
 
        HashMap<String, Integer> maps = new HashMap<>();
        String justArr[] = new String[N];
 
        for (int i = 0; i < N; i++) {
            String s = sc.next();
            justArr[i] = s;
            maps.put(s, i + 1);
        }
 
        for (int i = 0; i < M; i++) {
            if (sc.hasNextInt()) {
                System.out.println(justArr[sc.nextInt() - 1]);
            } else {
                System.out.println(maps.get(sc.next()));
            }
        }
 
    }
}
cs


넘나 발랄한 문제~ 과정을 다 읽었는데 문제랑 그렇게 연관은 없었음. 


연관 알고리즘에 이분탐색, 이진탐색트리, 등등이 있었지만, 트리를 직접 구현하거나 이분탐색으로 풀려고 하니까 시간초과가 떴다 (내가 비효율적이게 짠 거일진 모르겠지만)


그래서 공부안해본 Map 을 찾아보고 참고해서 풀었는데, 진짜 짱인듯...


[알고리즘]


int 값을 key 로 하는 map 도 만드는게 좋을까 생각했는데 그냥 배열번호 대로 넣어서 이름을 찾아주는 편이 빠를 것 같아서 따로 String 배열을 만들었다. (justArr)


1. maps 변수와 justArr 배열에 각각 몬스터 이름들을 집어넣는다.

2. 질문에서 숫자가 나오면 justArr 배열에서 바로 추출해주고

3. 그 외 문자가 나오면 maps 변수에서 문자에 해당하는 값을 출력해준다.

'공부 > 알고리즘' 카테고리의 다른 글

정렬 - 삽입, 퀵, 병합  (0) 2016.11.12
백준2252_줄 세우기  (0) 2016.11.08
백준1991_트리  (1) 2016.11.02
백준5397_키로거  (2) 2016.10.31
백준10845_큐  (1) 2016.10.28

댓글