문제
해결 방법
기본적인 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 |