프로그래머스 - 기능개발 (C#)

Leedong·2022년 7월 3일
0

programmers

목록 보기
8/18

문제 설명

int형 배열 작업 목록 진행율(progresses)과
위 배열과 같은 길이(Length)의 작업 목록 속도(speeds)가 주어지고,
같은 날 몇 개의 작업이 완료되는지를 반환하는 문제입니다.

문제 풀이

앞 작업부터 진행율을 확인해서 완료 카운트를 올리기 때문에
최근 진행율을 확인한 index를 담은 변수(idx)를 사용해서 앞에서부터 순차적으로 확인합니다.

  1. speeds에 맞게 진행률을 올립니다.
  2. i = idx부터 100% 이상이면 100% 미만인 작업을 찾을 때까지 반복문을 돌립니다.
    2-1 진행율이 100% 이상이면 카운트를 증가시키고
    2-2 진행율이 100% 미만이면 idx = i
  3. 작업 카운트를 배열에 추가시키고 다시 1번부터 반복합니다.
  4. progresses[idx]의 진행률이 100% 이상이면 반복문을 종료합니다.

배열은 동적으로 추가가 되지 않기 때문에 List를 사용해서 추가하고 마지막에
List를 Array형식으로 변환해서 반환하면 됩니다.

제출 코드

using System;
using System.Collections;
using System.Collections.Generic;

public class Solution 
{
    public int[] solution(int[] progresses, int[] speeds) 
    {
        List<int> answer = new List<int>();
        
        int idx = 0;
        
        while (true)
        {
            int count = 0;
            // 1
            for (int i = 0; i < progresses.Length; i++)
            {
                progresses[i] += speeds[i];
            }
            // 2
            for (int i = idx; i < progresses.Length; i++)
            {
                // 2-1
                if (progresses[i] >= 100)
                {
                    count++;
                }
                // 2-2
                else
                {
                    idx = i;
                    break;
                }
            }            
            // 3
            if (count > 0)
            {
                answer.Add(count);
            }            
            // 4
            if (progresses[idx] >= 100)
            {
                break;
            }
        }
        
        return answer.ToArray();
    }
}
profile
Unity, C#

0개의 댓글