ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • PriorityQueue
  • getOrDefault
  • 프로그래머스 Lv.2
  • HashMap
  • stack
  • BFS
  • Queue
  • compareTo()
  • 프로그래머스
  • Comparator
  • DP
  • React
  • kotiln
  • Arrays.sort()
  • 해시
  • sort
  • dfs
  • 깃
  • 스택/큐
  • 코틀린
  • git
  • Android
  • entrySet
  • java
  • 백준
  • 깃허브
  • git bash
  • greedy
  • reactjs
  • 안드로이드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 > 기능개발

2022. 2. 28. 02:22

https://programmers.co.kr/learn/courses/30/lessons/42586?language=java 

 

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

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

programmers.co.kr

입력

  • progresses : 먼저 배포되어야하는 순서대로 작업의 진도가 적힌 정수 배열
  • speeds : 각 작업의 개발 속도 정수 배열

출력

각 배포마다 몇 개의 기능이 배포되는지

풀이

각 기능의 진도율과 개발속도를 저장하는 Function 클래스를 만든다.

  • 진도율이 100% 이상이 되는 기능수(cnt)를 세서 배포 시켜준다. ( list.add(cnt) )
  • 진도율이 100% 이상이 되는 기능이 없다면 진도율을 증가시켜준다. ( f.progress += f.speed )
import java.util.*;

class Solution {
    static class Function{
        int progress;
        int speed;
        
        public Function(int progress, int speed){
            this.progress = progress;
            this.speed = speed;
        }
    }
    public int[] solution(int[] progresses, int[] speeds) {
        int[] answer;
        ArrayList<Integer> list = new ArrayList<>();
        Queue<Function> queue = new LinkedList<>();
        for(int i=0;i<progresses.length;i++){
            queue.offer(new Function(progresses[i],speeds[i]));
        }
        int cnt=0;
        
        while(!queue.isEmpty()){
            // 진도율이 100% 이상이면 배포
            if(queue.peek().progress>=100){
                queue.poll();
                cnt++; // 기능 증가
            }else{
                if(cnt!=0) {
                    list.add(cnt); cnt=0; // 배포
                }
                // 진도율 증가
                for(Function f : queue){
                    f.progress += f.speed;
                }
                System.out.println(queue.peek().progress);

            }
           
        }

        list.add(cnt);
        answer = new int[list.size()];
        for(int i=0;i<list.size();i++){
            answer[i]=list.get(i);
        }
        return answer;
    }
}

 

+ 다른 풀이

각 기능의 진도율이 100%가 되기까지의 날짜를 미리 계산해서 하는 방식도 있었다.

각 기능의 작업기간 계산법

  • int date = (int) Math.ceil((100-progresses[i])/speeds[i]); 
  • Math.ceil() : 소수점 이하를 올림한다.

 

이 때, 해당 작업기간과 앞 기능의 작업기간을 비교 (q.peek()<date)

  • 짧으면 큐에 넣고 ( q.offer(date) )
  • 길면 큐에 들어있던 기능을 모두 배포해준다. (리스트에 큐의 사이즈 넣고, 큐 초기화)
import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        ArrayList<Integer> list = new ArrayList<>();
        Queue<Integer> q = new LinkedList<>();
        
        for(int i=0;i<speeds.length;i++){
            // 각 기능의 작업기간 계산
            int date = (int) Math.ceil((100-progresses[i])/speeds[i]); 
            // 앞 기능의 작업기간보다 길면 큐에 들어있던 기능 모두 배포
            if(!q.isEmpty() && q.peek()<date){
                list.add(q.size());
                q.clear();
            }
            // 앞 기능의 작업기간보다 짧으면 큐에 넣음
            q.offer(date);
        }
        list.add(q.size());
        int[] answer = new int[list.size()];
        for(int i=0;i<list.size();i++){
            answer[i]=list.get(i);
        }
        return answer;
    }
}
저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv.2 > 가장 큰 수  (0) 2022.02.28
[Java] 프로그래머스 Lv.2 > 큰 수 만들기  (0) 2022.02.28
[Java] 프로그래머스 Lv.2 > 다리를 지나는 트럭  (0) 2022.02.28
[Java] 프로그래머스 : 숫자 문자열과 영단어  (0) 2022.02.21
[Java] 프로그래머스 : 로또의 최고 순위와 최저 순위  (0) 2022.02.21
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv.2 > 가장 큰 수
    • [Java] 프로그래머스 Lv.2 > 큰 수 만들기
    • [Java] 프로그래머스 Lv.2 > 다리를 지나는 트럭
    • [Java] 프로그래머스 : 숫자 문자열과 영단어
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바