sm 기술 블로그

92. 1620(나는야 포켓몬 마스터 이다솜) 본문

문제/백준_자바

92. 1620(나는야 포켓몬 마스터 이다솜)

sm_hope 2022. 6. 19. 16:52
import java.util.*;
import java.io.*;

class Main {
	public static void main(String args[])throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String[] NM = br.readLine().split(" ");
		int N = Integer.parseInt(NM[0]);
		int M = Integer.parseInt(NM[1]);
		
		Map<String,String> PokemonDoGam_str = new HashMap<>();
		Map<String,String> PokemonDoGam_num = new HashMap<>();
		
		for(int i=0;i<N;i++) {
			String Pokemon = br.readLine();
			PokemonDoGam_str.put(Pokemon,Integer.toString(i+1));
			PokemonDoGam_num.put(Integer.toString(i+1),Pokemon);
		}
		
		
		for(int j=0;j<M;j++) {
			String quiz = br.readLine();
			try { // 받은 값이 숫자일 경우
				Integer.parseInt(quiz);
				sb.append(PokemonDoGam_num.get(quiz)).append("\n");
			}
			catch(Exception e){
				sb.append(PokemonDoGam_str.get(quiz)).append("\n");
			}
		}
		System.out.print(sb);
		
	}
}

문제요약

다솜이는 포켓몬마스터가 되기 위해 오박사가 내는 문제를 맞춰야한다.

숫자가 들어오면 포켓몬 이름을, 포켓몬 이름이 들어오면 숫자를 말해라.

설명

문제 설명보다 잡소리가 긴 문제로 이런 병맛을 좋아하는 나에게는 취향저격이다.

빨간 선을 기준으로 위에는 포켓몬 도감 아래는 문제이다.

Map<String,String> PokemonDoGam_str = new HashMap<>();
Map<String,String> PokemonDoGam_num = new HashMap<>();
		
		for(int i=0;i<N;i++) {
			String Pokemon = br.readLine();
			PokemonDoGam_str.put(Pokemon,Integer.toString(i+1));
			PokemonDoGam_num.put(Integer.toString(i+1),Pokemon);
		}

먼저 두개의 Map을 선언 하고 값을 넣어주었다,

뒤에 str이 붙은 Map은 key가 알파벳을 지닌 문자열이고, num은 key가 숫자인 문자열이다.

 

	for(int j=0;j<M;j++) {
			String quiz = br.readLine();
			try { // 받은 값이 숫자일 경우
				Integer.parseInt(quiz);
				sb.append(PokemonDoGam_num.get(quiz)).append("\n");
			}
			catch(Exception e){
				sb.append(PokemonDoGam_str.get(quiz)).append("\n");
			}
		}

자바스크립트, 파이썬의 경우에는 문자열이 숫자인지 아닌지 판별해 주는 내장함수가 있다.

자바도 isDigit()라는 내장함수를 제공하지만 문자열이 아닌 문자를 판별해 준다.

따라서 문자열이 숫자인지 문자인지 확인하기 위해서는 받은값의 앞부분을 문자로 바꾸고 비교하고 하며 코드 가독성이 떨어질 것이라고 생각하였다.

 

따라서 예외처리를 사용하였고, 만약 입력받은 quiz가 숫자라면  Integer.parseInt(quiz) 과정에서 에러가 발생하지 않는다.

반대로 입력받은 값이 알파벳으로 이루어진 문자열이라면 catch 구문으로 가게된다.

 

 

'문제 > 백준_자바' 카테고리의 다른 글

94. 1764(듣보잡)  (0) 2022.06.20
93. 10816(숫자 카드2)  (0) 2022.06.20
91. 14425 (문자열 집합)  (0) 2022.06.19
90. 10815(숫자카드)  (0) 2022.06.19
[단계별] 백준 (답) java (88~)  (0) 2022.05.06
Comments