알고리즘/자료구조
프로그래머스[자바] - 기능개발
제이G
2022. 6. 24. 20:41
문제풀이
1. 배열을 사용한 풀이
핵심:
배열을 큐처럼 활용
이를 위해, 큐의 front를 나타내기 위해 별도의 front 인덱스 사용
배열=[A, B, C, D]이고 front = 0인 상황에서 front인덱스가 2증가 했다는 것은,
A,B는 dequeue되고 현재 다음 dequeue할 원소는 C라는 의미
2. 큐를 사용한 풀이
핵심:
1) 각 기능별 배포날짜 구하기
2) 큐, 스택, 어레이리스트 기본 메소드 비교하며 공부
코드
1. 배열을 사용한 풀이
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
ArrayList<Integer> result = new ArrayList<>();
int Top = 0;
int numProg = progresses.length;
while (Top != numProg) {
int count = 0;
for (int i=0; i<numProg; i++) {
progresses[i] += speeds[i];
}
if (progresses[Top] >= 100) {
for (int i=Top; i<numProg; i++) {
if (progresses[i] >= 100) {
count ++;
}
else {
break;
}
}
result.add(count);
Top += count;
}
}
int[] answer = new int[result.size()];
for (int i=0; i<answer.length; i++) {
answer[i] = result.get(i);
}
return answer;
}
}
2. 큐를 사용한 풀이
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Queue<Integer> queue = new LinkedList<>();
for (int i=0; i<progresses.length; i++) {
queue.add( (int)Math.ceil((100.0-progresses[i]) / speeds[i]));
}
System.out.println(queue);
List<Integer> answer = new ArrayList<>();
while (!queue.isEmpty()) {
int day = queue.peek();
int cnt = 0;
// **주의: !queue.isEmpty() 조건을 달지 않으면 nullPointException 에러 발생.
// queue.peek() <= day 조건만 있다면, empty queue에서 다시 peek을 해서 null point 오류
while (!queue.isEmpty() && queue.peek() <= day) {
queue.poll();
cnt ++;
}
answer.add(cnt);
}
System.out.println(answer);
int[] answerArr = new int[answer.size()];
for (int i=0; i<answerArr.length; i++) {
answerArr[i] = answer.get(i);
}
return answerArr;
}
}