반응형
백준 1620번 문제 - 나는야 포켓몬 마스터 이다솜
문제 분석
- 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어진다.
- 문제가 알파벳으로만 들어오면 포켓몬 번호를 말해야 하고, 숫자로만 들어오면, 포켓몬 번호에 해당하는 문자를 출력한다.
해결 키 포인트
- 하나의 ArrayList만 가지고는 시간초과 발생
- Why? ArrayList에서 문자열을 찾으려할 때, indexOf(s)를 사용하는데 시간초과 발생
- 문자열로 쉽게 찾을 수 있게하기 위해 HashMap으로 String을 Key로 index 번호를 value로 구현
- 입력값이 숫자인지 문자열인지 판단하기 위해 try-catch 문에 문자열을 숫자로 변환한다.
- 변환시 오류가 나면 숫자가 아니라 문자열로, 오류가 안나면 숫자로 설정
코드
import java.io.*;
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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String [] monsters = new String[N];
HashMap<String, Integer> hashMap = new HashMap<>();
for (int i = 0; i < N; i++) {
monsters[i] = br.readLine();
hashMap.put(monsters[i], i);
}
for (int i = 0; i < M; i++) {
String s = br.readLine();
int index;
try {
index = Integer.parseInt(s);
} catch (IllegalArgumentException e) {
index = -1;
}
if(index == -1) {
bw.write(hashMap.get(s) + 1 + "\n");
}
else {
bw.write(monsters[index-1] + "\n");
}
}
bw.flush();
bw.close();
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 17219] 비밀번호 찾기 (JAVA) (1) | 2023.12.05 |
---|---|
[백준 11723] 듣보잡 (JAVA) (1) | 2023.12.05 |
[백준 11723] 집합 (JAVA) (0) | 2023.12.05 |
[백준 18110] solved.ac (JAVA) (0) | 2023.12.05 |
[백준 4949] 균형잡힌 세상 (JAVA) (0) | 2023.12.05 |