본문 바로가기
Blog/Sparta

99클럽 코테 스터디 13일차 TIL + 해시를 사용한 집합과 맵

by 코젼 2024. 4. 6.
728x90
반응형

백준

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

 

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

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

www.acmicpc.net


- 오늘의 학습 키워드 : 해시를 사용한 집합과 맵

- 공부한 내용 본인의 언어로 정리하기

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

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

    // N : 포켓몬의 개수, M : 맞춰야 하는 문제 개수
    String[] string = br.readLine().split(" ");
    int N = Integer.parseInt(string[0]);
    int M = Integer.parseInt(string[1]);

    // 도감
    Map<String, Integer> mapKeyString = new HashMap<>(); // key : 포켓몬 이름
    Map<Integer, String> mapKeyInteger = new HashMap<>(); // key : 도감 번호

    // 도감 포켓몬 목록 받기
    for (int i=0; i<N; i++) {
      String dogam = br.readLine();
      mapKeyString.put(dogam, i+1);
      mapKeyInteger.put(i+1, dogam);
    }

    // 문제 맞추기
    for (int i=0; i<M; i++) {
      String input = br.readLine();
      // 입력 값이 숫자인지 확인
      boolean isNumberic = input.chars().allMatch(Character::isDigit);

      // 숫자인 경우 {1, "Bulbasaur"}
      if (isNumberic) {
        // key가 있으면 value 값 저장
        if (mapKeyInteger.containsKey(Integer.parseInt(input)))
          sb.append(mapKeyInteger.get(Integer.parseInt(input))).append("\n");
      } else { // 문자인 경우 {"Bulbasaur", 1}
        // key가 있으면 value 값 저장
        if (mapKeyString.containsKey(input))
          sb.append(mapKeyString.get(input)).append("\n");
      }
    }
    System.out.println(sb);
  }
}

- 오늘의 회고 : Map 하나만 사용해서 value에 for문으로 하나씩 접근하는 방법을 했더니 시간 초과가 

코테 풀이 중에 제일 중요한 건 시간 초과를 어떻게 하면 안 할 수 있을지와 어떻게 해결할 수 있을지가 관건인 것 같다.

String과 Integer 둘다 key로 접근하고 싶어서 Map을 두 개 구현해서 해결했다.


99클럽 1기를 수강하면서 작성한 글입니다.

https://99club.oopy.io/

 

99클럽-1기 모집 중

현직 개발자와 함께하는 코테 스터디

99club.oopy.io

 

728x90
반응형

댓글