728x90
https://www.acmicpc.net/problem/1620
(쓸데없이) 문제가 상당히 길어서 직접 들어가서 확인하는 것이 좋을 것 같다.
시간초과를 얻어맞고 HashMap을 이용해 풀었다.
HashMap<Integer, String> map1 = new HashMap<>();
HashMap<String, Integer> map2 = new HashMap<>();
HashMap을 2개 사용했다.
1개는 번호를 키값으로, 나머지 1개는 포켓몬몬스터 이름을 키값으로 받는 HashMap이다.
for (int i = 1; i <= n; i++) {
String str = sc.next();
map1.put(i,str);
map2.put(str,i);
}
따라서 길이 map 에 값을 넣어줄때도 따로따로 넣어줘야 한다.
for (int i = 0; i < m; i++) {
String s = sc.next();
if ( 48 <= s.charAt(0) && s.charAt(0) <= 57) {
sb.append(map1.get(Integer.parseInt(s))+"\n");
} else {
sb.append(map2.get(s)+"\n");
}
}
이제 입력받은 값을 어떤 map에서 꺼내어 쓸지 정해야한다.
아스키코드 값을 사용했다. 아스키코드는 0~9까지의 숫자만 있으므로,
예로 14일 경우(문자열) -> charAt(0) 으로 첫번째자리가 숫자인지만 확인해 map1 또는 map2 를 사용할건지 정할 수 있다.
package BAEKJOON.Silver.Ⅳ;
/**
* 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
* 2 초 256 MB 51148 17845 13306 33.789%
*/
import java.util.HashMap;
import java.util.Scanner;
public class NO1620 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int n = sc.nextInt(); // 배열의 개수
int m = sc.nextInt(); // 찾는 문제 개수
HashMap<Integer, String> map1 = new HashMap<>();
HashMap<String, Integer> map2 = new HashMap<>();
for (int i = 1; i <= n; i++) {
String str = sc.next();
map1.put(i,str);
map2.put(str,i);
}
for (int i = 0; i < m; i++) {
String s = sc.next();
if ( 48 <= s.charAt(0) && s.charAt(0) <= 57) {
sb.append(map1.get(Integer.parseInt(s))+"\n");
} else {
sb.append(map2.get(s)+"\n");
}
}
System.out.println(sb);
}
}
728x90
'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글
백준 JAVA 2979 트럭 주차 (0) | 2022.09.05 |
---|---|
백준 JAVA 1940 주몽 (0) | 2022.09.02 |
백준 JAVA 2559 수열 (0) | 2022.09.01 |
백준 JAVA 9996 한국이 그리울 땐 서버에 접속하지 (0) | 2022.09.01 |
백준 JAVA 11655 ROT13 (0) | 2022.08.31 |
댓글