https://www.acmicpc.net/problem/1620
백준 1620번 나는야 포켓몬 마스터 이다솜 문제 링크입니다.
핵심
이 문제는 순서대로 들어온 포켓몬의 이름을 순서대로 도감에 저장한다. 그리고 숫자를 입력하면 그 숫자에 해당하는 포켓몬 이름이 나오고, 이름을 입력하면 그 포켓몬의 순서가 나와야 한다. 따라서 HashMap을 사용하는 것이 적절하다.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
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());
StringBuilder sb = new StringBuilder();
HashMap<Integer, String> hash1 = new HashMap<Integer, String>();
HashMap<String, Integer> hash2 = new HashMap<String, Integer>();
for(int i = 1; i <= N; i++) {
String S = br.readLine();
hash1.put(i, S);
hash2.put(S, i);
}
for(int i = 0; i < M; i++) {
String S = br.readLine();
if(49 <= S.charAt(0) && S.charAt(0) <= 57) {
sb.append(hash1.get(Integer.parseInt(S))).append("\n");
}else {
sb.append(hash2.get(S)).append("\n");
}
}
System.out.println(sb);
}
}
해설
N은 도감에 저장할 수를 M은 검색할 수를 넣는다.
HashMap을 2개를 사용하였는데, 기본적으로 Key와 Value값을 1개의 HashMap에 넣어서 Key를 원하면 Key를 반환하고, Value를 원하면 Value를 반환하는 것이 가능하지만, 시간이 초과될 가능성이 있다.
따라서 2개의 HashMap을 사용하였다. 원하는 값을 출력받을 때 단순하게 get만 사용하기 위함.
우리가 검색하는 값의 첫 번째 값이 ASCII코드로 49~57가 나온다면 숫자이므로 hash1을 get 하고,
아닐 경우 hash2를 get 하여 StringBuilder에 추가해준다.
개선점이나 오류가 있다면, 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준]11729번 하노이 탑 이동 순서(java) (1) | 2022.07.23 |
---|---|
[백준]10828번 스택(java) (0) | 2022.07.21 |
[백준]2004번 조합0의 개수(java) (0) | 2022.07.17 |
[백준]15650번 N과M(2) (java) (0) | 2022.07.16 |
[백준]15649번 N과 M(1) (java) (0) | 2022.07.15 |