지구정복

[자료구조] 백준 - 나는야 포켓몬 마스터 이다솜 본문

데이터 엔지니어링 정복/Algorithm

[자료구조] 백준 - 나는야 포켓몬 마스터 이다솜

nooh._.jl 2021. 8. 4. 17:48
728x90
반응형

https://www.acmicpc.net/problem/1620

 

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

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

-문제해설

처음에 해시맵 두 개로 풀었는데 다른 분들 풀이를 보니 그냥 배열과 맵을 가지고도 충분히 풀 수 있는 문제였다.

 

먼저 필요한 거는 book1이란 배열과 book2란 해시맵이다.

book1의 인덱스는 입력되는 순서 1부터 26이 되고

각 인덱스의 값은 포켓몬 이름이 된다.

 

book2 해시맵에서는 book1과 반대로 키가 포켓몬 이름이 되고 값이 입력되는 순서가 된다.

 

그래서 다솜이가 문제를 맞혀야하는 것이 숫자라면

book1[ 숫자 ] 를 출력하면 포켓몬 이름이 출력되고

 

다솜이가 맞혀야하는 것이 포켓몬 이름이면

book2.get( 포켓몬이름 )을 출력하면 이름에 해당되는 순서가 출력된다.

 

 

파이썬에서는 자바의 맵형식을 대신할 수 있는 것이 딕셔너리 자료구조이다.

딕셔너리의 키에 포켓몬 이름을 넣고 값에 입력순서를 삽입하면 된다.

 

 

-자바

package search;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
//BJ1620_1
public class BJ1620_1 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st = new StringTokenizer( br.readLine() );
		
		int n = Integer.parseInt( st.nextToken() );	//도감의 포켓몬 수
		int m = Integer.parseInt( st.nextToken() );	//다솜이가 맞춰야되는 문제의 개수
		String[] book1 = new String[n+1];
		HashMap<String, Integer> book2 = new HashMap<String, Integer>();
		
		for( int i=1; i<=n; i++ ) {
			book1[i] = br.readLine();
			book2.put( book1[i],  i );
		}
		
		StringBuffer sb = new StringBuffer();
		while( m --> 0 ) {
			String input = br.readLine();
			if( '1' <= input.charAt(0) && input.charAt(0) <= '9' )
				sb.append( book1[ Integer.parseInt(input) ] ).append( "\n" );
			else sb.append( book2.get(input) ).append( "\n" );
		}
		System.out.println( sb );
	}
}

 

 

-파이썬

import sys
l = sys.stdin.readline
n, m = map(int, l().split())
book1 = []
book2 = {}
ans = []

for i in range( 1, n+1 ):
    name = l().rstrip()
    book1.append( name )
    book2[ name ] = i
    
for _ in range( m ):
    po = l().rstrip()
    if po.isdigit(): ans.append( book1[ int(po)-1 ] )
    else: ans.append( str( book2[po] ) )
print( "\n".join( ans ) )
728x90
반응형
Comments