본문 바로가기

코딩테스트/programmers

기능개발

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

 

프로그래머스

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

programmers.co.kr

 

 

카테고리가 스택/큐 이긴 한데, 굳이 스택/큐가 필요없어보였다.

 

각 작업별로 처리에 필요한 시간은 [(100(%) - 진행률)/진행속도] 이다.

문제의 제한사항의 마지막 항목에 따라 소수점은 올림처리해야 한다. (올림처리하지않으면 마지막 테스트케이스가 실패한다.)

 

주요 로직은,

n번째 작업의 남은 시간(a)과 n-1번째 작업의 남은 시간(b)을 비교한다.

a > b 인 경우, 새로운 배포가 일어나야 한다.

a <= b 인 경우, b의 배포때 같이 배포된다.

 

위 로직을 기준으로 소스를 작성하면 아래와 같이 완성됨

 

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int total = 0;
        int cnt = 0;
        
        List<Integer> counter = new ArrayList();
        for (int i = 0; i < progresses.length; i++) {
            int progress = progresses[i];
            int speed = speeds[i];
            
            int duration = (int) Math.ceil((100.0 - progress) / speed);
            
            if (i == 0) {
                total = duration;
                cnt++;
            } else if (total < duration) {
                total = duration;
                counter.add(cnt);
                cnt = 1;
            } else {
                cnt++;
            }
        }
        
        counter.add(cnt);
        
        return counter.stream().mapToInt(c -> (int) c).toArray();
    }
    
}

'코딩테스트 > programmers' 카테고리의 다른 글

뉴스 클러스터링  (0) 2023.10.16
프로세스  (0) 2023.10.12
튜플  (0) 2023.10.10
의상  (0) 2023.10.10
캐시  (0) 2023.10.06