문제
https://www.acmicpc.net/problem/1620
입력
첫째 줄에는 포켓몬의 개수 N이랑 맞춰야 하는 문제의 개수 M이 주어진다. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다.
둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어온다. 포켓몬 이름의 최대 길이는 20, 최소 길이는 2야. 그 다음 줄부터 총 M개의 줄에 내가 맞춰야하는 문제가 입력으로 들어와. 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력해야한다.
출력
첫째 줄부터 차례대로 M개의 줄에 각각의 문제에 대한 답을 말한다. 숫자가 들어왔다면 숫자에 해당하는 포켓몬, 포켓몬 이름이 들어왔다면 포켓몬에 해당하는 숫자를 출력한다.
입력 예시 1
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
아이디어
이 문제는 해쉬 맵을 통해 해결 가능합니다.
해쉬 맵이란 키와 값 두 쌍으로 이루어진 데이터를 의미합니다. 가령 HashMap에서 key를 String으로 받고 value를 Integer로 받겠다고 하면 (Pokemon, 1) 과 같은 형태로 데이터가 저장됩니다.
N번 줄 까지 포켓몬의 이름을 map에 저장하고, 그 다음 M번 부터는 포켓몬의 이름이 나오면 해당 하는 숫자, 숫자가 나오면 해당하는 포켓몬 이름을 출력하면 됩니다.
우리는 첫 번째로 숫자와 이름을 어떻게 구별한 것인지 고민해야 되며, 두 번째로 각기 다른 입력에 대한 출력을 어떻게 할 것인지 고민해봐야 합니다.
우선 문자열을 입력 받은 다음에 문자열의 첫 자리가 숫자라면 숫자, 아니라면 문자열이겠죠. 이는 Character.isDigit() 이라는 메소드로 쉽게 구현이 가능합니다.
또한 해쉬 맵을 하나는 문자가 key, 또 다른 하나는 숫자가 key 총 두 개를 생성하여 입맛에 맞는 출력을 고려할 수 있습니다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
HashMap<String, Integer> map1 = new HashMap<>();
HashMap<Integer, String> map2 = new HashMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
for (int i = 0; i < N; i++) {
String s = br.readLine();
map1.put(s, i + 1);
map2.put(i + 1, s);
}
for (int i = 0; i < M; i++) {
String s = br.readLine();
if (Character.isDigit(s.charAt(0))) System.out.println(map2.get(Integer.parseInt(s)));
else System.out.println(map1.get(s));
}
}
}
'Algorithm' 카테고리의 다른 글
DFS, BFS with Java (0) | 2022.09.14 |
---|---|
다익스트라(Dijkstra) 알고리즘 with Java (0) | 2022.09.14 |
[백준/BAEKJOON] 11723 : 집합 with Java (0) | 2022.09.12 |
[백준/BAEKJOON] 1676 : 팩토리얼 0의 개수 with Java (0) | 2022.09.12 |
[백준/BAEKJOON] 11725 : 트리의 부모 찾기 with Java (0) | 2022.09.11 |
댓글