티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

문제는 위와 같으며 주어진 작업의 수만큼 for 문을 돌면서 작업을 완료하는데 걸리는 일 수를 구한 뒤 큐에 저장합니다. 이때 큐의 가장 앞에 있는 값과 현재 값을 비교해서 더 작은 경우에만 큐의 마지막에 값을 추가하고 현재 값이 더 큰 경우에는 큐에 있는 값을 모두 빼면서 개수를 세고 해당 개수를 결과 배열에 저장하면 문제를 해결할 수 있습니다.

 

파이썬 코드는 다음과 같습니다.

def solution(progresses, speeds):
    queue = []
    answer = []

    for i in range(len(progresses)):
        wd = wd = (100 - progresses[i]) // speeds[i]  # 작업 완료 일 구하기
        if (100 - progresses[i]) % speeds[i] != 0:
            wd += 1
        
        if len(queue) == 0 or queue[0] >= wd:  # 큐의 가장 앞에 있는 작업 완료 일과 비교하여 작은 경우에만 큐에 저장
            queue.append(wd)
        else:
            count = 0
            while queue:  # 큐에 값이 없을 때까지 pop 하고 그 수를 계산
                queue.pop(0)
                count += 1
            answer.append(count)  # 결과 배열에 지금까지 큐에 있던 값의 수를 저장
            queue.append(wd)  # 현재 작업의 완료일을 다시 큐에 저장

    if len(queue) != 0:  # 큐에 값이 남아있는 경우 값을 모두 제거하고 그 개수를 계산해 결과 배열에 저장
        count = 0
        while queue:
            queue.pop(0)
            count += 1
        answer.append(count)

    return answer

 

자바 코드는 다음과 같습니다.

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> queue = new ArrayDeque<>();
        ArrayList<Integer> result = new ArrayList<>();
        
        for (int i = 0; i < progresses.length; i++) {
            int wd = (100 - progresses[i]) / speeds[i];
            if ((100 - progresses[i]) % speeds[i] != 0) {
                wd += 1;
            }

            if (queue.isEmpty() || queue.peek() >= wd) {
                queue.add(wd);
            } else {
                int count = 0;
                while (!queue.isEmpty()) {
                    queue.poll();
                    count++;
                }
                result.add(count);
                queue.add(wd);
            }
        }

        if (!queue.isEmpty()) {
            int count = 0;
            while (!queue.isEmpty()) {
                queue.poll();
                count++;
            }
            result.add(count);
        }

        int[] answer = result.stream().mapToInt(i -> i).toArray();
        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함