💡 문제
![](https://velog.velcdn.com/images/longbright_choi/post/e532c82b-b2bf-4a8b-b874-94a11d878cb9/image.png)
💬 입출력 예시
![](https://velog.velcdn.com/images/longbright_choi/post/a5f8647a-ac50-4b6e-902b-f364a76bd59f/image.png)
📌 풀이(소스코드)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
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<Integer, String> numberMap = new HashMap<>();
HashMap<String, Integer> nameMap = new HashMap<>();
for (int i = 1; i <= N; i++) {
String s = br.readLine();
numberMap.put(i, s);
nameMap.put(s, i);
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
String key = br.readLine();
if (Character.isDigit(key.charAt(0))) {
sb.append(numberMap.get(Integer.parseInt(key))).append("\n");
} else {
sb.append(nameMap.get(key)).append("\n");
}
}
System.out.println(sb);
}
}
📄 해설
접근
- 우선 문제가 너무 길고 불필요해서 가장 필요한 부분만 캡쳐해서 가져왔다..
- 번호가 들어오면 해당 포켓몬의 이름을 출력하고, 이름이 들어오면 해당 포켓몬의 번호를 출력해야하기 때문에 두 개의 HashMap 을 사용하는 것으로 접근했다.
과정
- 로직은 간단하다. 단순 구현 문제이므로, 입력을 받은 후, 출력을 요구하는 M개의 입력에 대하여 해당 입력이 숫자인 경우와 문자열인 경우의 처리를 분기한다.
- 두 개의
HashMap
을 사용한다. 포켓몬의 번호와 이름을 입력 받으면서 각각 <번호, 이름> 쌍과 <이름, 번호> 쌍으로 저장한다.
- 문자열인 경우 <번호, 이름> 쌍을 저장한 맵에 접근하고, 숫자인 경우 <이름, 번호> 쌍을 저장한 맵에 접근한다.