알고리즘/프로그래머스

기능개발

베리영young 2024. 8. 30. 00:09

사용 알고리즘: 스택

사용 언어: java

 

import java.util.*;

class Solution {
    static Stack<Integer> order = new Stack<>();
    static Stack<Integer> workSpeed = new Stack<>();
    
    public int[] solution(int[] progresses, int[] speeds) {
        for(int i=speeds.length-1; i>=0; i--) {
            order.push(progresses[i]);
            workSpeed.push(speeds[i]);
        }
        
        int days = -1;
        int cnt = 0; //한 번 배포할 때, 배포 가능한 갯수
        ArrayList<Integer> answer = new ArrayList<>();
        while(!order.isEmpty()) {
            int firstOrder = order.pop();
            int firstSpeed = workSpeed.pop();
            
            if(days == -1) {
                days = (100 - firstOrder) / firstSpeed;
                if(days * firstSpeed < 100 - firstOrder)
                    days++;
                cnt++;
            }
            else {
                if(days * firstSpeed >= 100 - firstOrder)
                    cnt++;
                else {
                    answer.add(cnt);
                    
                    cnt = 0;
                    days = days = (100 - firstOrder) / firstSpeed;
                    if(days * firstSpeed < 100 - firstOrder)
                        days++;
                    cnt++;
                }
            }
        } 
        answer.add(cnt);
        
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

좀 더 깔꼼한 코드 못 만드나 흠..

그리고 어떤 알고리즘으로 풀어야 하는지 안 나와 있었으면 stack을 사용할 아이디어를 낼 수 있었을지 모르겠음..

'알고리즘 > 프로그래머스' 카테고리의 다른 글

부모의 형질을 모두 가지는 대장균 찾기 -  (0) 2024.09.02
모의고사  (0) 2024.08.30
상담원 인원 ****  (0) 2024.08.27
n + 1 카드게임 *(후우..)  (0) 2024.08.23
무인도 여행  (0) 2024.08.20