본문 바로가기
개인 공부/TIL

[ TIL - PGS ] 99클럽 코테 스터디 14일차 TIL + 오늘의 학습 가이드

by 킴도비 2024. 8. 4.

💡 오늘의 학습 키워드

  • 이분 탐색

 

✅ 오늘 공부한 내용

 

👀 오늘의 회고

🤣 오늘의 문제점

  • 늘 그랫듯이..시간초과 ㅠ..

 

🔥 어떤 시도를 했는가?

  • 초반에는 m의 숫자들을 hashmap에 추가한 다음에 출력하려 했으나? 비효율적인지 시간초과가 뜨기 시작했다...
    • 일단 BufferedReader로 입력 받고
    • split하여 배열에 담은 뒤에 LinkedHashMap에 담아서
    • for문을 한번 더 돌려 n의 숫자들이 있을 때 getOrDefault로 + 1을 하여 넣으려 했으나..
    • 안타깝게도 시간 초과가 떴기에..
  • ChatGpt가 추천해준 방법으로 다시 해보게 되었다.
    • 비효율적인 split은 한 문장으로 줄여준 다음
    • HashMap에 n의 숫자들을 더해주었다.
    • 그 다음 바로 StringBuilder를 사용하여 m의 숫자들이 있으면 해당 숫자의 value값을 넣고, 아니라면 0을 넣게 사용했더니
    • 엄청 깔끔한 코드가 나왔다.
    • 하지만 메모리 및 시간초과가 매우 아슬아슬 했기에 조금 더 빠르게 할 수 있는 방법을 찾아야겠다
  • 아래는 제출한 코드!
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException{
        // 첫째 줄 상근이가 가지고 있는 개수 N
        // 숫자 카드가 적혀 있는 정수
        // 셋째 줄 M
        // 넷째 줄 몇개 가지고 있는가
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        String[] ns = br.readLine().split(" ");
        int m = Integer.parseInt(br.readLine());
        String[] ms = br.readLine().split(" ");
        
        // HashMap으로 키를 선정한 이후? 값들이 있으면 추가하면 되지 않나?
        
        Map<Integer, Integer> hsm = new HashMap<>();
        
        for(String num : ns){
            int number = Integer.parseInt(num);
            hsm.put(number, hsm.getOrDefault(number, 0) + 1);
        }

        StringBuilder answer = new StringBuilder();
        
        for(String num : ms){
            int number = Integer.parseInt(num);
            answer.append(hsm.getOrDefault(number, 0)).append(" ");
        }

        System.out.println(answer.toString());
        
        
    }
}

메모리랑 시간이 조곰....혹시 더 좋은 방법이 있다면 알려주세요! ㅠ 댓글 환영합니다..

 

 

👏 무엇을 새로 알았는가?

  • getOrDefault를 저렇게 사용할 수 있는지 몰랐고.. (나는 그냥 key에서 value값 가져올 때만 쓰는 줄 알았다..ㅎ..)
  • gpt가 설명하기를 
    • 키가 맵에 존재하지 않아도 기본 값을 지정할 수 있어 안전하게 조회가 가능하고, 
    • 맵을 초기화 할 때 모든 키를 미리 0으로 초기화하지 않아도 되며, 키가 없으면 기본 값인 0을 반환하도록 만들었고,
    • 키가 맵에 존재하는지 여부를 검사하고 그에 따라 값을 가져오는 두 단계를 하나로 합칠 수 있어 코드가 간결해지기 때문
  • 이라고 얘기하였다.
  • 좀 적극적으로 써먹을만 해서 잘 외워놔야 겠다!

 

👩‍💻 내일은 무엇을 학습할 것인가?

  • 항해 99문제풀고
  • 원티드 제발 제출해~~!!