본문 바로가기
공부/알고리즘

기능개발

by shining park 2024. 11. 4.

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 나의 풀이

✅ 작업완료까지 필요한 날짜 Queue ➡︎ queue

  • 남은 진도 = 100 - progresses[i]
  • 남은 진도 / 작업 속도 ➡︎ ex) 3.5 , 3.333 등의 경우, 4일이 필요 ➡︎ 오름 Math.ceil
  • 남은 날 = (int) Math.ceil((100.0 - progresses[i]) / speeds[i]);
  • Math 클래스의 메소드 아래 표 참고
메소드 설명
ceil(double a) 올림
floor(double a) 내림
round(double a) 반올림
abs() 절댓값
random() 0.0 ~ 1.0 사이 임의의 doublegud 데이터 생성, 반환
max(a, b) 최댓값
min(a, b) 최솟값
pow(double, a, double b) 제곱 a^b
sqrt(double a) 제곱근
subtractExact( int/long a, int/long b) 차이 b-a

 

✅ queue 의 남은 날짜 비교

✅ 배포에 포함된 기능 수 ➡︎ cnt

✅ 먼저 배포 되어야 하는 기능의 날짜 _ 앞 ➡︎ first

  • ex) queue ➡︎ 먼저 배포되어야 하는 쪽 : (앞) 3 , 3/2, 7 (뒤)
  • 뒤 남은 날짜 <= 앞 남은 날짜
    • ex) 먼저 배포되어야 하는 쪽 : (앞) 3 , 3/2 (뒤) 일 때
    • 3/2는 앞의 3과 함께 배포될 수 있으므로
    • cnt++
    • queue에서 3을 빼준다.
  • 뒤 남은 날짜 > 앞 남은 날짜 
    • ex) 먼저 배포되어야 하는 쪽 : (앞) 3/2 , 7 (뒤) 일 때
    • 7은 앞의 3/2과 함께 배포될 수 없으므로
    • 쌓인 cnt를 answer에 넣어준다. (배포됨)
    • 초기화 cnt=1; first=queue.poll();

 

- 나의 코드

import java.util.*;

class Solution {
    public ArrayList<Integer> solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> answer = new ArrayList<>();
        
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        
        //작업완료까지 필요한 날짜
        for(int i=0; i<progresses.length; i++) {
            int days = (int) Math.ceil((100 - progresses[i]) / (double) speeds[i]);
            
            queue.add(days);
        }
        //System.out.println(queue);
        
        //배포에 포함된 기능 수
        int cnt = 0;
        //먼저 배포 되어야 하는 기능의 날짜 _ 앞
        int first = queue.peek();
    
        //남은 날짜 비교 _ 앞, 뒤
        while(!queue.isEmpty()) {
            if(queue.peek() <= first) {
                // 뒤 <= 앞
                cnt++;
                queue.poll();
            } else {
                // 뒤 > 앞
                answer.add(cnt);
                // 초기화
                //cnt = 0;
                cnt = 1;
                first = queue.poll();
            }
        }
        
        answer.add(cnt);
        
        return answer;
    }
}

'공부 > 알고리즘' 카테고리의 다른 글

2019 KAKAO BLIND RECRUITMENT > 오픈채팅방  (0) 2024.11.06
구명보트  (0) 2024.11.05
숫자 짝꿍  (0) 2024.11.03
2019 카카오 개발자 겨울 인턴십 > 크레인 인형뽑기 게임  (0) 2024.11.02
N-Queen  (0) 2024.11.01