프로그래머스 2단계 : 기능개발 (Java 자바)

2023. 9. 21. 02:02·💻 코딩테스트/programmers
728x90
문제 설명

 

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

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

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

 

 

제한 사항

 

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

 

입출력 예

 

 

 

풀이

 

이 문제는 작업의 진도와 개발 속도를 이용하여 각 배포마다 몇 개의 기능이 배포되는지를 계산하는 문제입니다.

 

1. que와 spd 큐에 작업 진도와 속도를 저장합니다.

2. 날짜(days)를 1부터 시작하여 각 날짜마다 작업 진도를 계산합니다.

3. 첫 번째 작업이 100% 이상인 경우, 그 작업 및 동일한 날짜에 완료된 작업들을 모두 처리하고, 완료된 작업 수를 array 리스트에 추가합니다.

4. 날짜를 증가시켜 다음 날짜로 넘어갑니다.

5. 모든 작업이 완료될 때까지 위 과정을 반복합니다.

6. 최종적으로 array 리스트에 저장된 완료된 작업 수를 결과 배열 answer에 저장하고 반환합니다.

 

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int complete; // 완료된 작업 수를 저장할 변수
        int days = 1; // 경과한 날짜를 나타내는 변수
        ArrayList<Integer> array = new ArrayList<>(); // 각 배포마다 완료된 작업 수를 저장할 리스트
        Queue<Integer> que = new LinkedList<>(); // 작업 진도를 저장하는 큐
        Queue<Integer> spd = new LinkedList<>(); // 작업 속도를 저장하는 큐
        
        // 작업 진도와 속도를 큐에 저장
        for (int i = 0; i < progresses.length; i++)
            que.add(progresses[i]);
        for (int i = 0; i < speeds.length; i++)
            spd.add(speeds[i]);
        
        while (!que.isEmpty()) {
            complete = 0; // 완료된 작업 수 초기화
            
            // 첫 번째 작업이 100% 이상이면 완료 처리
            if (que.peek() + spd.peek() * days  >= 100) {
                while(!que.isEmpty() && que.peek() + spd.peek() * days >= 100) {
                    complete++;
                    que.poll(); // 완료된 작업 제거
                    spd.poll(); // 완료된 작업의 속도 정보 제거
                }
                array.add(complete); // 완료된 작업 수를 리스트에 추가
            }
            days++; // 경과 일수 증가
        }
        
        // 결과 배열 생성
        int[] answer = new int[array.size()];
        for (int i = 0; i < array.size(); i++) {
            answer[i] = array.get(i);
        }
        
        return answer; // 결과 배열 반환
    }
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'💻 코딩테스트 > programmers' 카테고리의 다른 글

프로그래머스 2단계 : 피로도 (Java 자바)  (0) 2023.09.21
프로그래머스 3단계 : 미로 탈출 명령어 (Java 자바)  (0) 2023.09.21
프로그래머스 2단계 : 튜플 (Java 자바)  (0) 2023.09.21
프로그래머스 2단계 : 캐시 (Java 자바)  (0) 2023.09.20
프로그래머스 3단계 : 인사고과 (Java 자바)  (0) 2023.09.20
'💻 코딩테스트/programmers' 카테고리의 다른 글
  • 프로그래머스 2단계 : 피로도 (Java 자바)
  • 프로그래머스 3단계 : 미로 탈출 명령어 (Java 자바)
  • 프로그래머스 2단계 : 튜플 (Java 자바)
  • 프로그래머스 2단계 : 캐시 (Java 자바)
gxxg
gxxg
함께 일하고 싶은 개발자를 꿈꾸는 예비개발자의 공부 기록
  • gxxg
    공공
    gxxg
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • ☁️ 구름 x 카카오 Deep Dive 풀스택 (7)
        • html, css (1)
        • Java (3)
        • 스프링 MVC (0)
      • 💻 코딩테스트 (89)
        • 백준 (2)
        • programmers (87)
      • SQLD (1)
      • Language (3)
        • Java (2)
        • JavaScript (1)
      • Style Sheet (0)
        • CSS (0)
        • SCSS & SASS (0)
      • DBMS (2)
        • Oracle (2)
        • MySQL (0)
        • postgresql (0)
        • 데이터베이스 기초 이론 (0)
      • React (0)
      • SpringBoot (0)
      • JSP (2)
      • 알고리즘 (0)
      • 2023-02 몰입형 SW 정규 교육 (24)
        • 9월 프로젝트 (8)
      • 벽돌깨기 (4)
      • Etc (4)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    javascript
    eclipse
    회원 관리 시스템
    이클립스
    DFS
    자바
    spring
    Lv2
    2단계
    티스토리챌린지
    CSS
    프로젝트 구조
    코딩테스트
    LV3
    3단계
    HTML
    java
    오블완
    POST
    springboot
    programmers
    톰캣
    JSP
    0단계
    junit 테스트
    Lv0
    자바스크립트
    구현체
    코테
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gxxg
프로그래머스 2단계 : 기능개발 (Java 자바)
상단으로

티스토리툴바