https://school.programmers.co.kr/learn/courses/30/lessons/42586
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
먼저 개발하는 시간에 대해 값을 구해 queue에 담고, 이를 반복문을 통해 List에 담으면서 queue의 가장 위 수와 현재 수를 비교해서 작을 경우에 count를 늘리는 형식으로 답을 풀었다.
정답
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution
{
public int[] solution(int[] progresses, int[] speeds)
{
List<int> answer = new List<int>();
Queue<int> queue = new Queue<int>();
for(int i = 0; i < progresses.Length; i++)
{
int num = 100 - progresses[i];
int complete = (int)MathF.Ceiling((float)num / speeds[i]);
queue.Enqueue(complete);
}
while(queue.Count > 0)
{
int day = queue.Dequeue();
int count = 1;
while(queue.Count > 0 && queue.Peek() <= day)
{
count++;
queue.Dequeue();
}
answer.Add(count);
}
return answer.ToArray();
}
}
가장 위 수를 뽑은 다음, 뒤 수는 현재 뽑은 수보다 작을 경우에 다 개발이 되었지만 앞에 개발이 되지 않아 대기하고 있던 프로그램들이기 때문에 count를 늘리고 dequeue해주는 형식으로 문제를 풀었다.
회고
처음에는 queue를 이용하지 않고 반복문과 if문으로 풀었는데, 어느 지점에서 계속 오류가 생겨 queue를 통해 다시 문제를 풀었더니 해결되었다.
'백준 등 알고리즘' 카테고리의 다른 글
[C#] 백준 21921번 블로그 (0) | 2024.10.14 |
---|---|
[프로그래머스] LV.2 피로도 (0) | 2024.08.26 |
[C#] 백준 거스름돈 14916 (그리디 알고리즘) (0) | 2024.06.24 |
[C#] 프로그래머스 Lv.2 n^2 배열 자르기 (0) | 2024.06.18 |
[C#] 백준 2178 미로 탐색 (1) | 2024.06.12 |