알고리즘 문제풀이/백준

#1620 : 나는야 포켓몬 마스터 이다솜

모항 2022. 3. 27. 18:49

풀이방법

사용된 것:

HashMap

 

2022.03.27

 

오답노트 #1620 : 나는야 포켓몬 마스터 이다솜

풀이방법 및 문제점 2022.03.27 번호를 입력받았다면 포켓몬 이름을 출력하고, 포켓몬 이름을 출력받았다면 번호를 출력해야 한다. 두 가지 기준으로 빠르게 자료를 찾아와야 하는 문제이다. 결론

blowupmomo.tistory.com

번호를 입력받았다면 포켓몬 이름을 출력하고,

포켓몬 이름을 출력받았다면 번호를 출력해야 한다.

두 가지 기준으로 빠르게 자료를 찾아와야 하는 문제이다.

 

가장 적합한 자료구조가 무엇인지를 판단하는 게 관건이었다.

해시맵을 사용해야겠다는 생각은 쉽게 해낼 수 있었지만,

이름과 번호 두 가지 기준을 고려해야 한다는 까다로운 조건이 있어서

해시맵 사용을 해도 시간초과가 날 수 있는 문제였다.

이로 인한 시행착오를 오답노트에 적어두었다.

 

HashMap<String, Integer> 하나와 String[] 하나를 사용하면 된다.

 

코드

Java(2022.03.27)

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{
		// TODO Auto-generated method stub
		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> searchNumbers = new HashMap<String, Integer>();
		String[] searchNames = new String[n+1];
		
		for(int i = 0; i<n; i++) {
			String temp = br.readLine();
			searchNumbers.put(temp, i+1);
			searchNames[i+1] = temp;
		}
		
		for(int i = 0; i<m; i++) {
			String input = br.readLine();
			if(searchNumbers.containsKey(input)) {
				//주어진 데이터가 포켓몬의 이름인 경우
				System.out.println(searchNumbers.get(input));
			}else {
				//주어진 데이터가 포켓몬의 번호인 경우
				System.out.println(searchNames[Integer.parseInt(input)]);
			}
		}
	}

}

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

#11723 : 집합  (0) 2022.03.28
#15312 : 이름 궁합  (0) 2022.03.27
#1181 : 단어 정렬  (0) 2022.03.26
#10951 : A + B - 4  (0) 2022.03.26
#1932 : 정수 삼각형  (0) 2022.03.24