반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
작업 진도, 작업 속도를 입력 받습니다. 완료된 작업은 배포를 하게 되는데 앞의 작업이 끝나지 않았다면 배포할 수 없습니다.
각 배포마다 몇 개의 기능이 배포되게 되는지 구해주세요.
ex) Progresses = [93, 30, 55], speeds = [1, 30, 5] 일 때,
작업 완료 시간은 [7, 7, 9]가 됩니다. 즉 배포를 할때, 1,2번이 같이 되고 3번은 따로 되니 [2, 1]을 반환하면 됩니다.
풀이 방법
작업이 완료되는데 걸리는 시간을 먼저 구해줍니다.
int[] times = new int[speeds.Length];
for (int i = 0; i < progresses.Length; i++){
times[i] = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] > 0)
times[i]++;
}
진도율이 95%인 작업의 개발 속도가 4%라면 하루가 아닌 이틀이 걸리게 됩니다.
그렇기에 % 연산을 하여 나머지 값이 있다면 하루 늘려주는 코드를 추가하여 작업 완료일을 구해줬습니다.
0~N까지 가장 오래걸리는 수를 찾아줍니다.
앞의 작업이 끝나기 전에는 배포를 할 수 없기 때문에 가장 오래걸리는 수를 기준으로 동시 배포 기능의 개수를 구해줍니다.
List<int> ans = new List<int>();
int maxNum = times[0];
int cnt = 1;
for (int i = 1; i < times.Length; i++)
{
if (times[i] > maxNum)
{
maxNum = times[i];
ans.Add(cnt);
cnt = 1;
}
else
cnt++;
}
ans.Add(cnt);
가장 큰 작업 시간을 찾게 되면 그 보다 더 큰 시간을 찾기 전 까지 모든 기능의 수를 구해줍니다.
더 큰 시간을 찾게되면 뒤에 것들은 동시에 배포가 되기 때문에 ans에 추가해줍니다.
정답 코드
using System;
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] times = new int[speeds.Length];
for (int i = 0; i < progresses.Length; i++){
times[i] = (100 - progresses[i]) / speeds[i];
if ((100 - progresses[i]) % speeds[i] > 0)
times[i]++;
}
List<int> ans = new List<int>();
int maxNum = times[0];
int cnt = 1;
for (int i = 1; i < times.Length; i++)
{
if (times[i] > maxNum)
{
maxNum = times[i];
ans.Add(cnt);
cnt = 1;
}
else
cnt++;
}
ans.Add(cnt);
return ans.ToArray();
}
}
반응형
LIST
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
프로그래머스 쿠키 구입 (C++, C#) (1) | 2025.01.31 |
---|---|
프로그래머스 메뉴 리뉴얼 (C++) (1) | 2025.01.29 |
프로그래머스 스킬트리 (C#) (0) | 2025.01.25 |
N개의 최소공배수 (C#) (3) | 2025.01.24 |
프로그래머스 다음 큰 숫자 (C#) (0) | 2025.01.22 |