문제
1620번: 나는야 포켓몬 마스터 이다솜
첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면
www.acmicpc.net
해결 방법
기본적인 HashMap 사용 문제이다.
HashMap에 대해 공부할겸 관련된 문제를 풀면서 정리를 해두려고 한다.
HashMap은 Key, Value 로 이루어져 있는데 문제에서는 포켓몬 이름을 순서대로 입력 받은 다음
숫자를 주면 해당되는 순서에 있는 포켓몬 이름을 출력하고, 포켓몬 이름을 주면 몇 번째 순서에 있는지 출력해야한다.
그래서 두 가지 경우를 다 대응할 수 있게끔 포켓몬 이름이 Key인 HashMap과 순서가 Key인 HashMap을 생성해서
해결하였다.
그리고 숫자로 주어졌을 때와 문자로 주어졌을 때를 판단해서 처리를 해야하는데 그 부분은
www.delftstack.com/ko/howto/java/how-to-check-if-a-string-is-a-number-in-java/
이 사이트를 참고하여, double을 이용해서 구분하는 방법을 사용해보았다.
그래서 숫자가 주어지면 숫자를 Key로 지정한 poketmonNum 에서 값을 가져오고,
문자가 주어지면 문자를 Key로 지정한 poketmonName 에서 값을 받아와 출력하였다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
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());
HashMap<String, Integer> poketmonName = new HashMap<>();
HashMap<Integer, String> poketmonNum = new HashMap<>();
for (int i = 1; i <= N; i++) {
String name = br.readLine();
poketmonName.put(name, i);
poketmonNum.put(i, name);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
String input = br.readLine();
if (isNumber(input)) {
sb.append(poketmonNum.get(Integer.parseInt(input)) + "\n");
} else {
sb.append(poketmonName.get(input) + "\n");
}
}
System.out.println(sb);
}
static boolean isNumber(String s) {
try {
Double.parseDouble(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
'Algorithm > BaekJoon' 카테고리의 다른 글
[JAVA] 백준 2933 : 미네랄, 18500 : 미네랄2 (0) | 2021.03.29 |
---|---|
[JAVA] 백준 2776 : 암기왕 (0) | 2021.03.25 |
[JAVA] 백준 14267 : 회사 문화 1 (0) | 2021.03.24 |
[JAVA] 백준 15900 : 나무 탈출 (0) | 2021.03.23 |
[JAVA] 백준 1068 : 트리 (0) | 2021.03.22 |