Algorithm/programmers

기능개발

마닐라 2022. 2. 24. 13:06

📍 문제 설명

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

 

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

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

programmers.co.kr

 

💡 접근

큐이용해서 작업량이 100이 넘어갔을 때 그 뒤에 작업들도 완료 가능한지 확인한다.

효율성을 생각하면 큐에 있는 작업이 100이상이 되는 만큼 한번에 증가시키면 될듯..

 

👩‍💻 코드

import java.util.*;

class Solution {
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    static char[] c = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
    static int[] arr;
    static char[] arr2;
    static HashMap<Character, Integer> map;
    static boolean[] visited;
    static String[] clone;
    static int answer;

    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer = {};

        Queue<Point> q = new LinkedList<>();
        ArrayList<Integer> list = new ArrayList<>();
        //큐에 작업의 진도 넣기
        for(int i = 0; i < progresses.length; i++) q.offer(new Point(progresses[i], speeds[i]));

        //작업의 개발 속도 만큼 증가 시키기
        while(!q.isEmpty()) {
            int len = q.size();
            for (int i = 0; i < len; i++) {
                Point cp = q.poll();
                q.offer(new Point(cp.progress + cp.speed, cp.speed));
            }
            int cnt = 0;
            while(q.peek().progress >= 100) {
                q.poll();
                cnt++;
                if(q.isEmpty()) break;
            }
            if(cnt > 0) list.add(cnt);
        }

        answer = new int[list.size()];
        for(int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        System.out.println(Arrays.toString(answer));
        return answer;
    }

    public static void main(String[] args) {
        Solution s = new Solution();

        int n = 2;
        int[] progresses = {95, 90, 99, 99, 80, 99};
        int[] speeds = {1, 1, 1, 1, 1, 1};
        s.solution(progresses, speeds);
    }

    private class Point {
        private int progress;
        private int speed;

        public Point(int progress, int speed) {
            this.progress = progress;
            this.speed = speed;
        }

        @Override
        public String toString() {
            return "Point{" +
                    "progress=" + progress +
                    ", speed=" + speed +
                    '}';
        }
    }
}

'Algorithm > programmers' 카테고리의 다른 글

타겟넘버  (0) 2022.02.24
더 맵게  (0) 2022.02.24
[2017 카카오코드]단체사진 찍기  (0) 2022.02.23
[2017 카카오코드]카카오프렌즈 컬러링북  (0) 2022.02.23
[2019 카카오 블라인드]오픈채팅방  (0) 2022.02.23