알고리즘/자료구조

프로그래머스[자바] - 기능개발

제이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;
    }
}