728x90
백준 1620번 나는야 포켓몬 마스터 이다솜
내가 떠올린 풀이 해설
Hash 맵을 이용 해서 푸는 문제이다. HashMap을 이용해서 <String, String>으로 받아 key와 vlaue를 두 개를 저장을 한다. 하나는 i를 String으로 바꿔서 key, 포켓몬 이름은 value를 넣어주고 다른 하나는 두 개를 바꿔서 저장을 한다. 답의 출력을 받을 때 받은 것이 숫자인지 문자인지 판별하는 메서드를 만들어서 true, false로 반환한다. 그리고 StringBuilder를 이용하여 정답을 출력한다.
정확한 풀이
import java.io.*;
import java.util.*;
public class Baek1620 {
static String str;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
HashMap<String, String> map = new HashMap<>();
for(int i = 1; i <= n; i++) {
String ss = br.readLine();
String num = Integer.toString(i);
map.put(num, ss);
map.put(ss, num);
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < m; i++) {
str = br.readLine();
if(isInteger()) {
sb.append(map.get(str) + "\\n");
}
else {
sb.append(map.get(str) + "\\n");
}
}
System.out.println(sb.toString());
}
private static boolean isInteger() {
for(int j = 0; j < str.length(); j++) {
if(Character.isDigit(str.charAt(j))) {
return true;
}
}
return false;
}
}
문제점
실버 4의 문제이고 쉬운 문제라고 생각했다. 문제를 푸는데는 어려움이 없었지만 계속 시간 초과가 발생했다. 숫자인지 판별해주는 메소드를 만들지 않았고 문제를 풀 때 map에 key, value 하나만 저장해 vlaue를 이용해 key값을 가져오려고 하였다. 여기서 시간 초과가 발생했다. 방법이 떠오르지 않아 이를 key, value를 바꿔서 하나 더 저장하는 아이디어를 검색을 해서 찾았습니다.
오늘의 회고
오늘은 쉬운 알고리즘 문제 한문제를 풀고 그동안 풀었던 알고리즘 개념을 다시 정리하면서 블로그에 작성하려고 합니다. 반복적인 복습과 꾸준한 학습으로 점점 더 발전하는 개발자가 되겠습니다.
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
Do it! 알고리즘 코딩 테스트 (64번 ~ 66번) (0) | 2022.06.21 |
---|---|
백준) 문자열 (0) | 2022.06.21 |
Do it! 알고리즘 코딩 테스트 (62번 ~ 63번) (0) | 2022.06.17 |
Do it! 알고리즘 코딩 테스트 (61번) (0) | 2022.06.16 |
Do it! 알고리즘 코딩 테스트 (57번 ~ 59번) (0) | 2022.06.15 |