Algorithm

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

yujin2 2020. 10. 1. 16:07

문자열을 탐색할 때는 HashMap을 사용하는 것이 좋다.

 

Map은 많은 데이터 중에서 원하는 데이터를 빠르게 찾을 수 있는 컬렉션이고, 사전과 같은 자료구조이다.

Map은 key와 value를 가지고, 중복된 키를 가질 수 없다.

데이터를 저장할 때는 put() 메소드를 사용하고, key를 통해 value값을 추출할 때는 get() 메소드를 사용한다.

 

 

1. key가 문자열인 HashMap과 정수인 HashMap을 2개 만들었다.

2. N개의 포켓몬을 2개의 HashMap에 저장한다.

   단, 하나는 key가 문자열(포켓몬 이름)이고 다른 하나는 key가 정수(포켓몬 번호)이다.

3. 맞혀야 하는 포켓몬 이름이나 번호가 들어오면 문자열로 받아 m에 저장한다.

4. key가 문자열인 HashMap에서 get() 메소드를 이용해 m의 value값을 찾는다.

   만약 m이 포켓몬 이름이라면 value가 존재할 것이고, StringBuilder에 추가한다.

5. 앞의 HashMap에서 value를 찾지 못했다면, 들어온 문자열이 포켓몬 번호라는 뜻이다. 그럼 key가 정수인 HashMap서 value값을 찾아 StringBuilder에 추가한다.

6. StringBuilder를 출력한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
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 a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		Map<String, Integer> hash1 = new HashMap<String, Integer>();
		Map<Integer, String> hash2 = new HashMap<Integer, String>();
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i < a; i++) {
			String n = br.readLine();
			hash1.put(n, i + 1);
			hash2.put(i + 1, n);
		}
		
		for (int j = 0; j < b; j++) {
			String m = br.readLine();
			if (hash1.get(m) != null) {
				sb.append(hash1.get(m) + "\n");
			} else {
				String word = hash2.get(Integer.parseInt(m));
				sb.append(word + "\n");
			}
		}
		System.out.println(sb);
		br.close();
	}
}