https://www.acmicpc.net/problem/1620
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
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());
HashMap<String, String> name = new HashMap<>();
HashMap<String, String> number = new HashMap<>();
for(int i = 1; i < n+1; i++){
String temp = br.readLine();
name.put(temp, Integer.toString(i));
number.put(Integer.toString(i), temp);
}
for(int i = 0; i < m; i++){
String test = br.readLine();
if(name.containsKey(test)){
System.out.println(name.get(test));
}else{
System.out.println(number.get(test));
}
}
}
}
기본적으로 들어온 입력에 대한 저장과, 탐색이 매우 중요한 문제라고 생각했다.
포켓몬 도감이 순차적으로 들어오는데 이때 값만 들어옴에도 번호를 갖고 있다. 따라서 해쉬맵이 적당한 자료구조라고 생각했다.
문제는 이 경우 검색을 키로도 해야 하고, 값으로도 해야 한다. 하지만 해쉬맵의 경우 키-> 값을 위한 자료구조이기 때문에 입력과 동시에 두 가지 방식 모두 저장하는 것으로 했다.
또한 입력을 받아서 string 으로 변환할지 혹은 검색할 때 이름이 아닌 번호가 들어왔다면 이것을 정수형으로 바꿔서 검색할지는 무엇이 더 좋은 것인지 더욱 공부해보고 조금이라도 효율적인 방법을 찾아야 할 것 같다.
또한, 문제를 잘 읽는 습관은 역시 중요하다!!!
왜냐면 습관적으로 for(int i = 0; i < n; i++)로 받는 경향이 있다. 하지만 이 문제에서도 포켓몬 도감의 인덱스는 0이 아닌 1부터 시작하기 때문에 이를 고려해야 한다.
'문제 풀이 > 백준' 카테고리의 다른 글
| [백준]4949번. 균형잡힌 세상(JAVA) (0) | 2024.04.04 |
|---|---|
| [백준]2164번. 카드2 (JAVA) (0) | 2024.04.04 |
| [백준]22233번. 제출(JAVA) (0) | 2024.04.03 |
| [백준]9996번. 한국이 그리울 땐 서버에 접속하지(JAVA) (1) | 2024.04.02 |
| [백준]20922번. 겹치는 건 싫어 (JAVA) (0) | 2024.03.30 |