[백준] 1620번 - HashMap, Character.isDigit() (java)

팥빵·2025년 9월 24일

Baekjoon

목록 보기
37/49

도감이 주어지고, 그 도감에 해당하는것이 무엇인지 출력하는 문제이다.

HashMap을 쓰는것이 정석인것은 확실해보이는데, 요구값이 문자열과 정수값이 섞여서 들어오는 것에 혼란을 느낄 수 있다.
HashMap에서 Value값으로 Key를 찾는 메소드는 없기 때문이다.

Character.isDigit()

그렇기에 해당 메소드가 이번 문제에서 빛을 발한다.
주어진 char 타입 변수가 정수형인지 아닌지를 판단해서 True와 False값을 반환해주기 때문이다.

여기다가, 문자열만 저장하는 String형 배열을 만들어주면 해결이다.

위 정보를 바탕으로 설계한 코드는 다음과 같다.

import java.util.*;
import java.io.*;

class Main{
	public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        HashMap<String, Integer> map = new HashMap<>();
        String[] arr = new String[N+1];
        
        for(int i=1; i<=N; i++){
        	String s = br.readLine();
            map.put(s, i);
            arr[i] = s;
        }
        
        for(int i=0; i<M; i++){
        	String s = br.readLine();
            boolean isNum = func(s);
            if(isNum){
            	int num = Integer.parseInt(s);
                bw.write(arr[num] + "\n");
            }else{
            	bw.write(map.get(s) + "\n");
            }
        }
        br.close();
        bw.flush();
        bw.close();
    }
    
    static boolean func(String s){
    	for(int i=0; i<s.length(); i++){
        	char ch = s.charAt(i);
            if(!Character.isDigit(ch)){
            	return false;
            }
        }
        return true;
    }
}

맞았습니다!!

profile
반갑습니다

0개의 댓글