개인 공부/TIL

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

킴도비 2024. 7. 29. 18:22

💡 오늘의 학습 키워드

 

✅ 오늘 공부한 내용

  • 큐에 대하여 학습하였다!
  • 오늘의 프로그래머스 문제! 기능개발
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

👀 오늘의 회고

🤣 오늘의 문제점

  • 일단 혼자서 초반에 너무 깊게 생각하다가 이상하게 몇 시간씩 삽질을 했다.
  • 이성을 되찾고 돌아보니 그렇게까지 했었어야 했나하는..생각이 🤔

 

🔥 어떤 시도를 했는가?

  • 일단 큐에 꽃혀서 막 이것 저것 추가했었었다.
  • 초반에는 for문을 돌리면서 날짜에 맞춰서 100퍼센트가 되면 제거하고 total에 넣는 방식으로 짰으나 이 시도가 실패한 시도였다는 것을 뒤늦게 깨달았다.
  • 그래서 새로 참고했던 방안이 미리 구해야하는 날짜를 넣어둔 뒤 해당 날짜들을 제거하는 방향이었다.
  • 자세한 코드 설명은 아래 코드에 첨부한다!
import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> arr = new ArrayList<>();
        Queue<Integer> q = new LinkedList<>();
        
        int len = speeds.length;
        
        // 남은 일수를 계산한다.
        for(int i = 0; i < len; i++){
            if((100 - progresses[i]) % speeds[i] == 0){
                q.add((100 - progresses[i]) / speeds[i]);
            } else {
                q.add(((100 - progresses[i]) / speeds[i]) + 1);
            }
        }
        
        // 1번은 무조건적으로 빠져야 한다. 1번 기능이 빠지지 않는 다면 뒷 기능도 전혀 빠질 수 없기 때문
        int x = q.poll();
        int count = 1;
        
        // q의 모든 값이 없어질 때까지 반복
        while(!q.isEmpty()){
            // 만약 x번째 남은 날보다 n번째 기능의 남은 날이 크거나 같다면 같이 배포!
            // n번째 기능 제거
            if(x >= q.peek()){
                count++;
                q.poll();
            } else {
                // 아니라면 총 값을 list에 추가해준다.
                arr.add(count);
                count = 1;
                x = q.poll();
            }
        }
        
        // 마지막 기능 까지 더한다.
        arr.add(count);
        
        int[] answer = new int[arr.size()];
        
        for(int i = 0; i < answer.length; i++){
            answer[i] = arr.get(i);
        }
        
        return answer;
    }
}

 

 

👏 무엇을 새로 알았는가?

  • 큐!
// Queue 사용 법~
import java.util.*;

Queue<레퍼런스 타입> q = new LinkedList<>();

// Queue에 값 넣기
q.add(value);

// 맨 앞에 있는 숫자 제거하는 겸 어떤 숫자인지 확인한다.
// poll과 remove의 차이점은 poll은 값이 없다면 null을 반환하지만
// remove는 Exception을 발생시킨다는 것
System.out.println(q.poll());

// q가 비어있는지 boolean 값으로 출력
System.out.println(q.isEmpty());

 

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

  • 항해 99 문제 풀기
  • 자소서 작성
  • 원티드 문제 풀기....
  • 책 읽기