본문 바로가기

백준 문제풀기/JAVA

[백준 1620 JAVA 자바] 나는야 포켓몬 마스터 이다솜

중략

 

이 문제의 핵심은

'알파벳으로 들어오면 번호를 말하고'

'숫자로 들어오면 문자(포켓몬 이름)을 출력'

입니다

 

번호와 포켓몬 이름을 잘 연결하는게 포인트입니다

 

처음엔 딕셔너리 구조로 하려고했는데 

실패했습니다...

 

HashMap을 이용해봅시다

 

전에 사용한 HashSet과 HashMap은 차이가 좀 있습니다

 

HashSet은 수학의 집합과 비슷하고 중복이 안되며

 

HshMap은 Key, Value 짝꿍을 만들어줍니다

Key는 중복을 허락하지 않습니다

 

1. 포켓몬 이름(String), 번호(Integer)를 짝지어서 HashMap을 만듭시다

2. 문제를 낼 때는 포켓몬 이름인지 번호인지 판단을 해서

3. 출력합시다

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main {
	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, Integer> nameMap = new HashMap<String, Integer>();
		String[] nameArr = new String[n + 1];
		StringBuilder sb = new StringBuilder();
		
		for(int i = 1; i < n + 1; i++) {
			String name = br.readLine();
			nameMap.put(name, i);
			nameArr[i] = name;
		}
		
		for(int i=0;i<m;i++) {
			String findStr = br.readLine();
			if(StringorNumber(findStr)) {
				int index = Integer.parseInt(findStr);
				sb.append(nameArr[index]);
			}
			else {
				sb.append(nameMap.get(findStr));
			}
			sb.append("\n");
		}
		
		System.out.println(sb.toString());
	}
	
	public static boolean StringorNumber(String s) {
	   try {
	       Double.parseDouble(s);
	       return true;
	   }
	   catch (NumberFormatException e) {
	       return false;
	   }
	}
}

nameArr 를 이용해서 번호값으로 포켓몬 이름을 찾을 수 있게 했습니다

다시 생각해보니

이렇게하면 딕셔너리 구조를 이용해도 될것같은 기분이 드네요