https://programmers.co.kr/learn/courses/30/lessons/42586
제한 사항
- 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
- 작업 진도는 100 미만의 자연수입니다.
- 작업 속도는 100 미만의 자연수입니다.
- 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
입출력의 예
progresses
[90, 30, 55]
speeds
[1,30,5]
return
[2,1]
풀이
큐를 사용하여, 먼저 들어 온 것이 먼저 나갈 수 있게 하였다.
Queue<Integer> q = new LinkedList<Integer>();
(100 - progresses[i]) / speeds[i] 를 한 이유는 tDiv에 몇일에 작업이 완료 되는지 알기 위해하였다.
첫번 째 if조건을 통해 0이 작업이 남았기에 배포 날이 하루 플러스 된다.
두번 째 if조건은 tDiv > Temp 를 통해서 배포가 총 몇번 되는지 알 수 있습니다.
즉, count를 통해 결과 값의 크기를 구할 수 있습니다.
for(i = 0; i < len; i++) {
tDiv = (100 - progresses[i]) / speeds[i];
if (((100 - progresses[i]) % speeds[i]) != 0)
tDiv++;
if(tDiv > Temp) {
Temp = tDiv;
count++;
}
q.add(tDiv);
tDiv = 0;
}
제일 처음으로 들어 간 큐의 값이 나오고, 결과 값은 1로 초기화 해준다. q.poll() 해 준 순간 한개가 배포 되기 때문이다.
다음부터 차례대로 큐의 값을 빼내어(tTemp1에 저장) tTemp와 비교를 해서 tTemp 값 보다 작으면 answer의 크기를 1 증가 시켜준다.
반대로 tTemp 값 보다 크면 tTemp1의 값을 tTemp에 넣어주고, 다시 이 기준의 날로 몇개가 배포 되는지 계산한다.
tTemp = q.poll();
answer[0] = 1;
for (i = 0; i < len - 1; i++) {
tTemp1 = q.poll();
if (tTemp >= tTemp1) {
answer[ansc]++;
} else {
tTemp = tTemp1;
ansc++;
answer[ansc] = 1;
}
}
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int i = 0, len = progresses.length;
int[] tdiv = new int[len];
int tDiv = 0, Temp = 0 ,tTemp = 0, tTemp1 = 0, count = 0, count1 = 1, ansc = 0;
Queue<Integer> q = new LinkedList<Integer>();
for(i = 0; i < len; i++) {
tDiv = (100 - progresses[i]) / speeds[i];
if (((100 - progresses[i]) % speeds[i]) != 0)
tDiv++;
if(tDiv > Temp) {
Temp = tDiv;
count++;
}
q.add(tDiv);
tDiv = 0;
}
int[] answer = new int[count];
tTemp = q.poll();
answer[0] = 1;
for (i = 0; i < len - 1; i++) {
tTemp1 = q.poll();
if (tTemp >= tTemp1) {
answer[ansc]++;
} else {
tTemp = tTemp1;
ansc++;
answer[ansc] = 1;
}
}
return answer;
}
}
'algorithm' 카테고리의 다른 글
[프로그래머스]더 맵게 (0) | 2020.03.07 |
---|---|
[프로그래머스]멀쩡한 사각형 (0) | 2020.03.01 |
[프로그래머스]위장 (0) | 2020.01.08 |
[프로그래머스]프린터 (0) | 2020.01.02 |
[프로그래머스][1차]비밀지도 (0) | 2019.12.23 |