
https://www.acmicpc.net/problem/1620
❓
풀긴 풀었는데 계속 시간초과가 나서 헤맸던 문제.
HashMap, Array, ArrayList 다 사용해봤는데 계속 시간초과가 나서 다른 사람의 풀이를 참고한 후 내 풀이와 비교했다.
❗
HashMap을 이용했을 때 key로 value를 찾으려면 entrySet을 이용하는 방법밖에 없다고 생각했는데, 굳이 그럴 필요 없이 String 배열을 따로 생성해 포켓몬 이름만 저장하여 찾는 방법도 있었다.
✨ 참고
https://maivve.tistory.com/140
(JAVA) 백준 1620번 : 나는야 포켓몬 마스터 이다솜
https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 10
maivve.tistory.com
풀이1
더보기
- 포켓몬 도감은
ArrayList
로 작성- n번만큼 for문을 돌며 포켓몬 추가
- m번만큼 for문을 돌며 입력받은 내용이 문자열인지 숫자인지 확인 후 맞는 내용 출력
- 숫자인 경우
get()
함수 이용 - 문자열인 경우
indexOf()
함수 이용
- 숫자인 경우
코드
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.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());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
ArrayList<String> pocketmon = new ArrayList<String>();
for (int i=0; i<n; i++) {
pocketmon.add(br.readLine());
}
for (int i=0; i<m; i++) {
String q = br.readLine();
/*
* 입력받은 내용이 숫자인지 문자열인지 확인
* 숫자면 get() 함수 이용해 이름 받아오기
* 문자열이면 indexOf() 함수 이용해 해당 문자열의 인덱스 찾기
*/
if (q.charAt(0) >= '0' && q.charAt(0) <= '9') {
bw.write(pocketmon.get(Integer.parseInt(q)-1) + "\n");
} else {
bw.write(pocketmon.indexOf(q)+1 + "\n");
}
}
bw.close();
}
}
풀이2
- 포켓몬 도감을
HashMap<String, Integer>
로 작성 - n만큼의 크기를 갖는 String 배열 생성
- 입력으로 숫자가 들어온 경우 String 배열에서 인덱스로 포켓몬 이 찾기
- 입력으로 문자열이 들어온 경우 HashMap에서 숫자 찾기
코드
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.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());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
HashMap<String, Integer> pocketmon = new HashMap<>();
String[] names = new String[n+1];
for (int i=1; i<=n; i++) {
String name = br.readLine();
pocketmon.put(name, i);
names[i] = name;
}
for (int i=0; i<m; i++) {
String q = br.readLine();
if (q.charAt(0) >= '0' && q.charAt(0) <= '9') {
bw.write(names[Integer.parseInt(q)] + "\n");
} else {
bw.write(pocketmon.get(q) + "\n");
}
}
bw.close();
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 24267/Java] 알고리즘 수업 - 알고리즘의 수행 시간 6 (1) | 2023.09.26 |
---|---|
[백준 2477/Java] 참외밭 (0) | 2023.02.16 |
[백준 11729/Java] 하노이 탑 이동 순서 (0) | 2023.01.21 |
[백준 2447/Java] 별 찍기 - 10 (0) | 2023.01.19 |
[백준 24060/Java] 알고리즘 수업 - 병합 정렬 1 (1) | 2023.01.04 |
댓글