백준 1620 나는야 포켓몬마스터 이다솜

전재우·2021년 3월 6일
0

백준 1620 나는야포켓몬마스터이다솜

백준 1620 나는야 포켓몬 마스터 이다솜

구현전 생각

1.첫번째 아이디어
먼저 입력을 받아 배열에 저장하고
String에 '0'~'100000' 을 빼서 숫자이면 배열에서 그 데이터값을 가지고오고 이름이면 그 배열에서 숫자를 가지고온다.
2.두번째 아이디어
먼저 입력받은 도감을 해쉬맵에 저장하고 그 해쉬맵에서 키값과 밸류값으로 검색한 후에 해당하는 밸류 값과 키값을 출력하는 방법


아쉬운점

1. 첫번째 아이디어에서 생각하지 못한 점은 출력 시간을 생각 하지 않았다 O(N^2) 시간이 걸림으로 통과 못하는 방법
-> IM 시험을 볼때도 그렇고 항상 먼저 시간을 확인하고 가능한지 먼저 확인하자.

2. 해쉬맵에 대한 공부가 완벽히 되어 있지 않아서 다시 검색하고 풀어야 했다. 너무 얕게 알고 있었던것 같다 해쉬맵의 경우 키값으로 밸류값을 찾을순 있지만 밸류값으로 키값을 찾기 위해서 탐색 작업을 해주어야한다. 이 문제를 해결 하기 위해서 두개의 해쉬맵을 사용했다.

코드 (잘못 푼 방식)

탐색 방법에

package com.study26;

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

public class backjoon_1620_나는야포켓몬마스터이다솜 {
	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());
		String[] dogam= new String[N+1];
		for (int i = 1; i <=N; i++) {
			st = new StringTokenizer(br.readLine());
			dogam[i]= st.nextToken();
		}
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			String temp = st.nextToken();
			//숫자면
			if(temp.charAt(0)>='1'&&temp.charAt(0)<='9')
			{
				int S = Integer.parseInt(temp);
				System.out.println(dogam[S]);
			}
			else {
				for (int j = 0; j < dogam.length; j++) {
					if(temp.equals(dogam[j])) {
						System.out.println(j);
					}
				}
			}
		}

	}
}	

코드 (Pass)

package com.study26;

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

public class backjoon_1620_나는야포켓몬마스터이다솜 {
	public static void main(String[] args) throws IOException {
		
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		String[] dogam= new String[N+1];
		HashMap<Integer,String> map = new HashMap<>();
		HashMap<String,Integer> map2 = new HashMap<>();
		for (int i = 1; i <=N; i++) {
			st = new StringTokenizer(br.readLine());
			String temp = st.nextToken();
			map.put(i, temp);
			map2.put(temp,i);
		}
		
		for (int i = 0; i <M; i++) {
			st = new StringTokenizer(br.readLine());
			String temp = st.nextToken();
			//숫자면
			if(temp.charAt(0)>='1'&&temp.charAt(0)<='9')
			{
				int S = Integer.parseInt(temp);
				//System.out.println(dogam[S]);
				wr.write(map.get(S)+"\n");
				wr.flush();
				
			}
			else {
				
											//System.out.println(j);
						wr.write(map2.get(temp)+"\n");
						wr.flush();
					
				
			}
			
		}
		
		wr.close();

	}
}	
profile
코린이

0개의 댓글