[BOJ] 1620 - 나는야 포켓몬 마스터 이다솜 (Java)

EunBeen Noh·2024년 2월 26일

Algorithm

목록 보기
21/52

알고리즘

  • 자료 구조
  • 해시를 사용한 집합과 맵

1. 문제

  • 포켓몬의 이름을 입력받고, 해당 이름을 통해 포켓몬의 번호를 찾거나 반대로 번호를 입력받아 포켓몬의 이름을 찾는 문제

2. Idea

  • HashMap
    • 포켓몬의 이름과 번호를 저장합니다. 이름을 키로, 번호를 값으로 저장
  • ArrayList 사용
    • 포켓몬의 이름을 순서대로 저장
    • 번호를 통해 이름을 찾을 때 사용

-> 시간초과 문제 해결

3. 풀이

3.1. 입출력 선언 및 변수 입력

  • N: 도감에 등록할 포켓몬 이름 수
  • M: 문제 수
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
   
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());

3.2. 포켓몬 도감 생성 및 저장

  • MashMap<String, Integer>
    • 이름을 키로, 번호를 값으로 저장하여 포켓몬 이름으로 번호를 찾을 때 사용
  • ArrayList
    • 포켓몬의 이름을 순서대로 저장하여 번호(->인덱스)를 통해 이름을 찾을 때 사용
HashMap<String, Integer> pokemonMap = new HashMap<>();
ArrayList<String> pokemonList = new ArrayList<>();

for (int i = 1; i <= N; i++) {
	String name = br.readLine();
	pokemonMap.put(name, i);
	pokemonList.add(name);
}

3.3. 입력 판별 및 결과 출력

  • Character.isDigit(input.charAt(0)) -> 입력이 숫자로 시작하는지 여부를 확인
    • 숫자이면 true, 문자이면 false return
  • 숫자로 시작하면 해당 번호에 해당하는 포켓몬의 이름을 출력
  • 알파벳으로 시작하면 해당 포켓몬의 이름에 해당하는 번호를 출력
for (int i = 0; i < M; i++) {
	String input = br.readLine();
	if (Character.isDigit(input.charAt(0))) {
		int index = Integer.parseInt(input);
		bw.write(pokemonList.get(index - 1) + "\n");
	} else {
		bw.write(pokemonMap.get(input) + "\n");
	}
}

4. 전체코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        HashMap<String, Integer> pokemonMap = new HashMap<>();
        ArrayList<String> pokemonList = new ArrayList<>();

        for (int i = 1; i <= N; i++) {
            String name = br.readLine();
            pokemonMap.put(name, i);
            pokemonList.add(name);
        }

        for (int i = 0; i < M; i++) {
            String input = br.readLine();
            if (Character.isDigit(input.charAt(0))) {
                int index = Integer.parseInt(input);
                bw.write(pokemonList.get(index - 1) + "\n");
            } else {
                bw.write(pokemonMap.get(input) + "\n");
            }
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

0개의 댓글