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

+ Recent posts