https://www.acmicpc.net/problem/1620
❓
풀긴 풀었는데 계속 시간초과가 나서 헤맸던 문제.
HashMap, Array, ArrayList 다 사용해봤는데 계속 시간초과가 나서 다른 사람의 풀이를 참고한 후 내 풀이와 비교했다.
❗
HashMap을 이용했을 때 key로 value를 찾으려면 entrySet을 이용하는 방법밖에 없다고 생각했는데, 굳이 그럴 필요 없이 String 배열을 따로 생성해 포켓몬 이름만 저장하여 찾는 방법도 있었다.
✨ 참고
https://maivve.tistory.com/140
풀이1
더보기
- 포켓몬 도감은 [ic]ArrayList[/ic]로 작성
- n번만큼 for문을 돌며 포켓몬 추가
- m번만큼 for문을 돌며 입력받은 내용이 문자열인지 숫자인지 확인 후 맞는 내용 출력
- 숫자인 경우 [ic]get()[/ic] 함수 이용
- 문자열인 경우 [ic]indexOf()[/ic] 함수 이용
코드
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
- 포켓몬 도감을 [ic]HashMap<String, Integer>[/ic]로 작성
- 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 (2) | 2023.01.04 |
댓글