알고리즘

[백준, 자바, 1620번] 나는야 포켓몬 마스터 이다솜

hminor 2024. 11. 12. 15:17

풀이

  • 알고리즘을 풀 때, 뭔가 항상 효율적으로 풀자라는 생각에
  • 시간이 좀 오래걸리는 경우도 있었는데
  • 이제는 그냥 단순히 최대한 빨리 푸는 것에 집중하고자 다짐
  • 우선 해당 문제에선 빠르게 풀기 위해선
  • 그냥 Map과 배열을 모두 활용하는게 좋을 것 같아
  • 그대로 적용해보니 수월하게 풀이 완료.
  • 다만 입력값이 문자열인지 숫자인지 정확하지 않은 것에 대한
  • 판별을 위해서, 별도의 함수를 작성.
  • 해당 함수는 정규식을 활용해서 숫자인지 문자인지 판별.
  • 이후 다른 코드를 보면서 입력값이 일정하게 정수, 문자열로만 주어진다면
  • 두 번째 코드로 해결한다면 더 빠르게 해결할 수 있음.

 

// 첫 번째 코드

import java.io.*;
import java.util.*;
public class _1620 {
    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());
        String[] pokemon = new String[N];
        Map<String, Integer> dic = new HashMap<>(N);
        for (int i=0; i<N; i++) {
            String poke = br.readLine();
            pokemon[i] = poke;
            dic.put(poke,i+1);
        }
        while (M>0) {
            String inp = br.readLine();
            if (isNum(inp)) bw.write(pokemon[Integer.parseInt(inp)-1]+"\n");
            else bw.write(dic.get(inp)+"\n");
            M--;
        }
        bw.flush();
    }

    public static boolean isNum(String str) {
        return str.matches("\\d+");
    }
}

 

// 두 번째 코드

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());
        String[] pokemon = new String[N];
        Map<String, Integer> dic = new HashMap<>(N);
        for (int i=0; i<N; i++) {
            String poke = br.readLine();
            pokemon[i] = poke;
            dic.put(poke,i+1);
        }
        while (M>0) {
            String inp = br.readLine();
            if (Character.isDigit(inp.charAt(0))) bw.write(pokemon[Integer.parseInt(inp)-1]+"\n");
            else bw.write(dic.get(inp)+"\n");
            M--;
        }
        bw.flush();
    }
}