본문 바로가기
백준

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

by naahy 2023. 2. 6.

 

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



풀긴 풀었는데 계속 시간초과가 나서 헤맸던 문제.
HashMap, Array, ArrayList 다 사용해봤는데 계속 시간초과가 나서 다른 사람의 풀이를 참고한 후 내 풀이와 비교했다.


HashMap을 이용했을 때 key로 value를 찾으려면 entrySet을 이용하는 방법밖에 없다고 생각했는데, 굳이 그럴 필요 없이 String 배열을 따로 생성해 포켓몬 이름만 저장하여 찾는 방법도 있었다.

 

참고

https://maivve.tistory.com/140

 

(JAVA) 백준 1620번 : 나는야 포켓몬 마스터 이다솜

https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 10

maivve.tistory.com


풀이1

더보기
  • 포켓몬 도감은 [ic]ArrayList[/ic]로 작성
    • n번만큼 for문을 돌며 포켓몬 추가
  • m번만큼 for문을 돌며 입력받은 내용이 문자열인지 숫자인지 확인 후 맞는 내용 출력
    • 숫자인 경우 [ic]get()[/ic] 함수 이용
    • 문자열인 경우 [ic]indexOf()[/ic] 함수 이용

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
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());
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		ArrayList<String> pocketmon = new ArrayList<String>();
		
		for (int i=0; i<n; i++) {
			pocketmon.add(br.readLine());
		}
		
		for (int i=0; i<m; i++) {
			String q = br.readLine();
			
			/*
			 * 입력받은 내용이 숫자인지 문자열인지 확인
			 * 숫자면 get() 함수 이용해 이름 받아오기
			 * 문자열이면 indexOf() 함수 이용해 해당 문자열의 인덱스 찾기
			 */
			if (q.charAt(0) >= '0' && q.charAt(0) <= '9') {
				bw.write(pocketmon.get(Integer.parseInt(q)-1) + "\n");
			} else {
				bw.write(pocketmon.indexOf(q)+1 + "\n");
			}
		}
		
		bw.close();
	}

}

 


 

풀이2

  • 포켓몬 도감을 [ic]HashMap<String, Integer>[/ic]로 작성
  • n만큼의 크기를 갖는 String 배열 생성
    • 입력으로 숫자가 들어온 경우 String 배열에서 인덱스로 포켓몬 이 찾기
    • 입력으로 문자열이 들어온 경우 HashMap에서 숫자 찾기

 

코드

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 Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		HashMap<String, Integer> pocketmon = new HashMap<>();
		String[] names = new String[n+1];
		
		for (int i=1; i<=n; i++) {
			String name = br.readLine();
			
			pocketmon.put(name, i);
			names[i] = name;
		}
		
		for (int i=0; i<m; i++) {
			String q = br.readLine();
			
			if (q.charAt(0) >= '0' && q.charAt(0) <= '9') {
				bw.write(names[Integer.parseInt(q)] + "\n");
			} else {
				bw.write(pocketmon.get(q) + "\n");
			}
		}
		
		bw.close();
	}

}

댓글