상세 컨텐츠

본문 제목

C# 프로그래머스 스택/큐 기능개발

프로그래밍/프로그래머스

by 개발자입니다 2021. 1. 13. 18:45

본문

728x90
반응형

프로그래머스 코딩테스트 연습


스택/큐 기능개발


문제 설명

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

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

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

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


//프로그래머스 스택/큐 기능 개발

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(int[] progressesint[] speeds) {
        int[] answer = new int[] {};
        
        //기능당 완료되는 일자를 저장하는 배열
        int[] days = new int[progresses.Length];
        //현재 진행중인 기능, 작업 속도, 퍼센테이지를 저장하는 정수형 변수
        int progressing = 0speed = 0 , persent = 0;
        
        //기능과 속도를 큐에 정의
        Queue<intqueue = new Queue<int>(progresses);
        Queue<intsppedQueue = new Queue<int>(speeds);
        //최종 몇개의 기능이 저장될지 큐에 정의
        Queue<intres = new Queue<int>();
        
        for(int i=0i < progresses.Lengthi++)
        {
            progressing = queue.Dequeue();  
            speed = sppedQueue.Dequeue();              
            persent = progressing
            
            while(true)
            {
                //퍼센트가 100과 같거나 넘으면 반복문 탈출
                if(persent >= 100)
                {
                    break;
                }
                //그렇지 않므녀 작업속도를 높여주고 일자 하루를 더함
                else
                {
                    persent = persent + speed;
                    days[i]++;        
                }
            }
        }
        
        //첫 번째 기능 배포전 두 번째 기능이 완료 된 경우 waitDay를 통한 카운트
        //몇 번의 배포를 저장하는 count 변수
        int waitDay = 0count = 1;


        for(int i = 0i < days.Lengthi=waitDay+i)
        {
            //waitDay 초기화
            waitDay = 0;
            for(int j = ij < days.Lengthj++ )
            {
                //완료된 날짜 days[i], days[j] 가 같거나 days[i]가 더 클 때
                if(days[i]>=days[j]) 
                {
                    //waitDay 더하기
                    waitDay++;
                }
                //아닐 시 반복문 탈출
                else
                {
                    //배포 횟수 늘리기
                    count++;
                    break;
                }
            }
            //waitDay가 0이 아니면 Queue에 waitDay 저장
            if(waitDay!=0
                res.Enqueue(waitDay);
        }        
        //count 배포 횟수 만큼 answer 배열 선언
        answer = new int[count];
        //반복문을 통한 answer 리턴
        for(int i=0i<counti++) 
        {
            answer[i] = res.Dequeue();
        }
        return answer;
    }
}


728x90
반응형

관련글 더보기

댓글 영역