Code.Dev_MH
DevMHK
Code.Dev_MH
전체 방문자
오늘
어제
  • 개발자의 일상 (40)
    • Language (5)
      • Java (4)
      • Kotlin (1)
      • Python (0)
    • Back-End (1)
      • Spring (1)
      • Django (0)
      • Error (0)
    • Infra (0)
      • Docker (0)
      • CI, CD (0)
      • AWS (0)
    • CS (12)
      • 컴퓨터 구조(Computer Architectur.. (12)
      • 운영 체제(OS) (0)
      • 시스템소프트웨어(SystemSoftware) (0)
      • 네트워크(Network) (0)
      • 소프트웨어공학(Software Engineerin.. (0)
      • 데이터베이스(DataBase) (0)
      • 자료구조(Data Structure) (0)
      • 알고리즘(Algorithm) (0)
    • Git (0)
    • Algorithm (21)
      • 프로그래머스 (5)
      • 백준 (16)
      • 코딩테스트 후기 (0)
    • 회고 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 브루트포스
  • 제로베이스백엔드스쿨
  • 프로그래머스
  • Greedy
  • Priority Queue
  • cs
  • java
  • 우선순위 큐
  • 너비우선탐색
  • 코틀린장점
  • 코틀린사용이유
  • computer architecture
  • 그리디
  • BFS
  • 다이나믹프로그래밍
  • 컴퓨터구조
  • 자바와비교
  • dp
  • INT

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Code.Dev_MH

DevMHK

[프로그래머스] 기능개발
Algorithm/프로그래머스

[프로그래머스] 기능개발

2022. 12. 28. 12:00

문제

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

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

제한 사항

  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.

생각해보기

  • 100% 이상만 되면 배포가 될 수 있으니 작업이 완료까지 남은 일수를 구한 값을 사용!
  • 첫 번째보다 두 번째가 개발은 먼저 될 수 있으나, 배포는 순서대로!!

Code

  1. 먼저 주어진 배열로 작업 완료 시간을 queue에다가 넣어둔다.

    • 남은 작업량을 작업 속도로 나눈 나머지가 0이면 나눈 몫으로 넣는다.
    • 남은 작업량을 작업 속도로 나눈 나머지가 0이 아니라면 나눈 몫 + 1로 넣는다.

  2. 갯수를 카운트랑 cnt변수와 시작할 때 임시값으로 tmp에 queue.peek으로 설정해둔다.

  3. queue를 하나씩 꺼낸 값인 cur과 tmp를 비교하면서 cur이 더 클 경우 지금까지 카운트해준 cnt를 list에 넣어주고 tmp값은 cur로 변경하며 cnt = 1(바뀐 tmp값 카운트)로 설정한다.

  4. queue가 비었다면 마지막으로 cnt값을 list에 넣어준다.

  5. 마지막으로 list에 있는 갯수들을 int 배열로 변환한다.


Java

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> queue = new LinkedList<>(); // 남은 작업 일수 담을 queue
        List<Integer> list = new ArrayList<>(); // 배포될 갯수 리스트

        for (int i = 0; i < progresses.length; i++) {
            if ((100 - progresses[i]) % speeds[i] == 0) {
            // 100%가 딱 맞아 떨어질 경우
                queue.offer((100 - progresses[i]) / speeds[i]);
            } else { // 그 외
                queue.offer((100 - progresses[i]) / speeds[i] + 1);
            }
        }

        int cnt = 0; // 개수를 셀 변수
        int tmp = queue.peek(); // 임시 값
        while (!queue.isEmpty()) {
            int cur = queue.poll();

            if (tmp < cur) { // 임시 값보다 방금 꺼낸 queue값이 더 클 경우
                list.add(cnt);
                tmp = cur;
                cnt = 1;
            } else {
                cnt++;
            }

            if (queue.isEmpty()) { // queue가 비었을 경우
                list.add(cnt);
                break;
            }
        }
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

테스트 결과

반응형

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

[프로그래머스] 모의고사  (0) 2023.01.10
[프로그래머스] k번째수  (0) 2022.12.30
[프로그래머스] 더 맵게  (0) 2022.12.29
[프로그래머스] 완주하지 못한 선수  (0) 2022.10.27
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [프로그래머스] 모의고사
    • [프로그래머스] k번째수
    • [프로그래머스] 더 맵게
    • [프로그래머스] 완주하지 못한 선수
    Code.Dev_MH
    Code.Dev_MH
    Back-End 개발자가 되기 위한 개발 노트(Java)

    티스토리툴바