문제:
https://www.acmicpc.net/problem/1620
나의 첫 번째 풀이(시간초과) - Map 활용
package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class test67 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
HashMap<Integer, String> pokemons = new HashMap<>();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
for (int i = 1; i <= n; i++) {
int key = i;
String name = br.readLine();
pokemons.put(key, name);
}
for (int i = 0; i < m; i++) {
String lookFor = br.readLine();
if (lookFor.matches("\\d+")) {
int key = Integer.parseInt(lookFor);
bw.write(pokemons.get(key));
} else {
for (Map.Entry<Integer, String> entry : pokemons.entrySet()) {
if (entry.getValue().equals(lookFor)) {
bw.write(String.valueOf(entry.getKey()));
}
}
}
if (i < m - 1) {
bw.write("\n");
}
}
bw.flush();
bw.close();
br.close();
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
나의 두번째 풀이 - ArrayList와 Map을 동시에 사용(정답)
package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.StringTokenizer;
public class test67 {
public static void main(String[] args) {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
List<String> pokemonList = new ArrayList<>();
HashMap<String, Integer> pokemonMap = new HashMap<>();
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
for (int i = 1; i <= n; i++) {
String name = br.readLine();
pokemonList.add(name);
pokemonMap.put(name, i);
}
for (int i = 0; i < m; i++) {
String lookFor = br.readLine();
if (lookFor.matches("\\d+")) {
int key = Integer.parseInt(lookFor);
bw.write(pokemonList.get(key - 1));
} else {
bw.write(String.valueOf(pokemonMap.get(lookFor)));
}
if (i < m - 1) {
bw.write("\n");
}
}
bw.flush();
bw.close();
br.close();
} catch (NumberFormatException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}'코딩테스트 공부 > java' 카테고리의 다른 글
| 백준 11866. 요세푸스 문제 (0) | 2025.01.17 |
|---|---|
| 백준 1764. 듣보잡 (0) | 2025.01.03 |
| 24511. queuestack (7) | 2024.12.28 |
| 백준 10989. 수 정렬하기 3(카운팅 정렬) (0) | 2024.12.21 |
| 백준 1018. 체스판 다시 칠하기 (2) | 2024.12.20 |