java
백준 1620 나는야 포켓몬 마스터 이다솜 자바 java
MiaCoder
2024. 1. 23. 14:48
이 문제는 앞서 본 문제와 비슷하게 HashMap를 사용하여 풀지만, 특이점이 있다.
이 문제는 key값을 통해 value값을 조회하기도 하고, value값을 통해 key 값을 조회하기도 한다.
하지만 HashMap는 value값을 통해 key값을 조회하는 것을 지원하지는 않는다.
이 경우 두 개의 HashMap를 사용함으로써 우리는 간단하게 해결할 수 있다.
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// N, M 읽기
HashMap<Integer, String> map = new HashMap<>();
HashMap<String, Integer> map2 = new HashMap<>();
// 두 개의 HashMap를 등록한다. 하나는 순번에 따라 포겟몬 이름을 반환하고,
// 나머지 하나는 포켓몬 이름에 따라 순번을 반환한다.
for (int i = 0; i < N; i++) {
String pocketMon = br.readLine();
map.put(i + 1, pocketMon);
map2.put(pocketMon, i + 1);
}
//반복문을 통해 map, map2에 모두 값을 채워준다. 순번이 1부터 시작하므로 i + 1을 사용한다.
for (int i = 0; i < M; i++) {
String readM = br.readLine();
if (isInt(readM)) {
//정수인지 판별하기 위해 간단한 메소드를 작성한다.
System.out.println(map.get(Integer.parseInt(readM)));
} else {
System.out.println(map2.get(readM));
}
}
br.close();
}
private static boolean isInt(String str) {
//정수인지 판별하는 메소드이다.
try {
Integer.parseInt(str);
// if문에서는 String타입으로 읽어온다. 따라서 정수형으로 변환한다.
// 변환이 될 경우 정수라고 볼 수 있고 true를 반환한다.
return true;
} catch (NumberFormatException e) {
return false;
//만약 변환이 되지 않는다면 다른 타입이다. 이 경우 false를 반환한다.
}
}
}