아이디어
문제가 엄청 길어서 열심히 봤는데 그냥 프롤로그였다...
처음에는 HashMap만 이용해서 풀려 했는데, Value로 Key를 찾으려면 O(n) 순회를 해야해서 시간이 걸리더라
그래서 HashMap<String, Integer> name2num와 String[] num2name을 이용해서
입력이 이름이면 Map, 정수면 배열을 사용하여 조회하게 했다.
클래스 연습한다고 클래스로 만들었는데, 좀 더 복잡해진 것 같긴 하다.
이를 코드로 구현하면 다음과 같다.
import java.io.*;
import java.util.HashMap;
public class N1620 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int M = Integer.parseInt(input[1]);
PMonCollection newDogam= new PMonCollection();
newDogam.insertCollection(N, br);
newDogam.test(M, br);
}
}
class PMonCollection {
private HashMap<String, Integer> name2num = new HashMap<>();
private String[] num2name;
PMonCollection() {}
public void insertCollection (int N, BufferedReader br) throws IOException {
num2name = new String[N + 1];
for (int i = 1; i <= N; i++) {
String name = br.readLine();
num2name[i] = name;
name2num.put(name, i);
}
}
public void test (int M, BufferedReader br) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 1; i <= M; i++) {
String input = br.readLine();
if (input.matches("[a-zA-Z]+")) {
bw.write(String.valueOf(name2num.get(input)) + '\n');
} else {
bw.write(num2name[Integer.parseInt(input)] + '\n');
}
}
bw.flush();
}
}
아직 초보라 많이 서툴고 틀린 부분이 있을 수 있습니다. 고수분들께서 조언해주실만한 사항이 있으면 감사히 받겠습니다.
'백준 > Silver' 카테고리의 다른 글
| [실버 2] [Java] 백준 1927번: 최소 힙 (1) | 2025.08.29 |
|---|---|
| [실버 4] [Java] 백준 17219번: 비밀번호 찾기 (0) | 2025.08.28 |
| [실버 2] [Java] 백준 1012번: 유기농 배추 (1) | 2025.08.26 |
| [실버 3] [Java] 백준 11726번: 2xn 타일링 (3) | 2025.08.23 |
| [실버 3] [Java] 백준 11659번: 구간 합 구하기4 (0) | 2025.08.22 |