본문 바로가기

컴퓨터&프로그래밍/Baekjoon

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

1. 문제

 

- 입력

첫 줄에는 도감에 수록된 포켓몬 수 N과 문제의 개수 M이 주어진다. (1 <= N, M <= 100,000)

 

둘째 줄 부터는 N개의 줄에 포켓몬 이름이 번호 순서대로 한 줄 씩 주어진다.

포켓몬 이름은 모두 영어이고, 첫 글자만 대문자고 나머지는 소문자이다. 일부 포켓몬은 마지막 문자만 대문자일 수도 있다. 이름 최대 길이는 20, 최소 길이는 2이다.

 

그 다음부터는 M개의 줄에 퀴즈가 주어진다. 도감 번호 또는 포켓몬 이름이 주어지면 해당하는 포켓몬 이름 또는 도감 번호를 출력하면 된다. (도감번호->포켓몬 이름, 포켓몬 이름->도감번호 출력)

도감에 없는 포켓몬은 퀴즈로 주어지지 않는다.

 

- 출력

답을 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
 

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

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

www.acmicpc.net


2. 풀이

시간 초과가 뜨지 않으려면 이름이 키, 번호가 값인 딕셔너리와 번호가 키, 이름이 값인 딕셔너리를 따로 만들어 써야한다.

// 나는야 포켓몬 마스터 이다솜
int[] input = Array.ConvertAll(Console.ReadLine().Split(" "), int.Parse);
int N = input[0]; int M = input[1];
Dictionary<int, string> numDict = new Dictionary<int, string>();
Dictionary<string, int> nameDict = new Dictionary<string, int>();

for (int i = 0; i < N; i++) {
    string pokemon = Console.ReadLine();
    numDict.Add(i+1, pokemon);
    nameDict.Add(pokemon, i+1);
}

using (StreamWriter sw = new StreamWriter(Console.OpenStandardOutput())) {
    for (int i =0; i < M; i++) {
        string quiz = Console.ReadLine();
        if (nameDict.ContainsKey(quiz)) 
            sw.WriteLine(nameDict[quiz]);
        else
            sw.WriteLine(numDict[int.Parse(quiz)]);
    }
}



Calendar
«   2025/06   »
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
Archives
Visits
Today
Yesterday