오늘은 스택/큐의 기능개발 문제를 풀었다.
사실 지난번에 풀던건데 못풀어서 다시 풀음.
소요 시간 3시간 반.. 이게 맞는건가
https://school.programmers.co.kr/learn/courses/30/lessons/42586
List<Integer> arrayList = new ArrayList<>();
int head = 0;
for(int i = 0; head < progresses.length; i++){
//progress update
for (int j = 0; j < progresses.length; j++){
if(progresses[j] < 100)
progresses[j] = progresses[j] + speeds[j];
}
//set result
int deployCount = 0;
for (int j = head; j < progresses.length; j++){
if(progresses[j] >= 100){
deployCount = deployCount + 1;
head ++;
}else{
break;
}
}
if(deployCount != 0){
arrayList.add(deployCount);
}
}
int[] answer = new int[arrayList.size()];
for(int j = 0; j < arrayList.size(); j++){
answer[j] = arrayList.get(j);
}
return answer;
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
int[] dayOfend = new int[100];
int day = -1;
for(int i=0; i<progresses.length; i++) {
while(progresses[i] + (day*speeds[i]) < 100) {
day++;
}
dayOfend[day]++;
}
return Arrays.stream(dayOfend).filter(i -> i!=0).toArray();
}
}
엄청나게 간결하다.
방법은
1. 프로세스(A)가 끝나는 날짜를 구한다. dayOfEnd + 1
2. 프로세스(A)의 다음 프로세스(B)가 해당 날짜에 작업이 끝났는지 확인
3. B의 작업이 끝나있다면 해당 dayOfEnd[day]++
4. B의 작업이 끝나지 않았다면 day를 새로 계산해서 dayOfEnd에 추가
자주자주 풀다보면 늘겠지!