자료구조&알고리즘/백준

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

yong_ღ'ᴗ'ღ 2023. 9. 30. 21:09

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

 

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

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

www.acmicpc.net

접근 방식) 두 가지 방식으로 풀었다.

1) HashMap 1개 사용

     → 그냥 HashMap<String, String> 만들어서 포켓몬 넣을 때마다 map.put(이름, 번호), map.put(번호, 이름) 해서 풀이

2) HashMap 2개 사용

     → key를 이름으로 갖는, 번호로 갖는 HashMap을 각각 2개 만들어서 풀이

 

 

1) HashMap<String, String> 만들어서 포켓몬 넣을 때마다 map.put(이름, 번호), map.put(번호, 이름) 해서 풀이

package tony_git.data_structure2;

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

public class B_1620_map1 {
    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());
        HashMap<String, String> map = new HashMap<>();

        for (int i= 1; i <= N; i++) {
            String name = br.readLine();
            String num = String.valueOf(i);
            map.put(name, num);
            map.put(num, name);
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < M; i++)
            sb.append(map.get(br.readLine())).append('\n');
        System.out.print(sb);
    }
}

 

 

2) key를 이름으로 갖는, 번호로 갖는 HashMap을 각각 2개 만들어서 풀이

번호로 적으면, 이름을 가져오고

이름을 적으면, 번호를 가져와야 하니

1. HashMap을 2개 만든다. (번호를 key로 갖는거 하나 & 이름을 key로 갖는거 하나)

2. N만큼 입력받은거 2개 HashMap에 각각 넣어준다.

3. M만큼 질문 개수 입력받아서 숫자인지, 문자인지 구별해서 해당 hashmap에서 값 가져와준다.

숫자인지 문자인지 구별하는 건, 아스키코드 값을 사용했다.

포켓몬 이름 첫글자는 다 대문자라고 했으니까,

입력받은 문자의 첫번째 문자 - 'A'가 0 이상이면 포켓몬 이름인거고, 아니면 숫자로 판단했다.

 

package tony_git.data_structure2;

import java.util.*;
public class B_1620 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        HashMap<String, Integer> map1 = new HashMap<>();
        HashMap<Integer, String> map2 = new HashMap<>();
        StringBuilder sb = new StringBuilder();

        for (int i = 1; i <= N; i++) {
            String name = sc.next();
            map1.put(name, i);
            map2.put(i, name);
        }

        for (int i = 0; i < M; i++) {
            String key = sc.next();
            if (key.charAt(0) - 'A' >= 0)
                sb.append(map1.get(key)).append('\n');
            else
                sb.append(map2.get(Integer.parseInt(key))).append('\n');
        }
        System.out.println(sb);
    }
}