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

지수·2021년 8월 2일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

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


👩‍💻 풀이

1. 문제 이해

이 문제는 작업 완성까지 남은 일의 양을 구하고, 이를 작업 속도로 나누어 작업별 소요 일수를 구하고,
소요 일수를 하나씩 꺼내 크기를 비교하면서 한번에 릴리즈되는 기능을 count 해주는 문제이다.

입출력 예로 제시된 [95,90,99,99,80,99], [1,1,1,1,1,1]을 보자

1. 작업 완성까지 남은 일의 양		[5,10,1,1,20,1]
2. 작업별 소요 일수			[5,10,1,1,20,1]
3. 한 번에 릴리즈되는 기능 묶음 		[5],[10,1,1],[20.1]

때문에 return 값은 [1,3,2]가 된다.

2. 큐 활용 풀이

  • 작업별 소요 일수를 계산하여 Queue에 push
  • 연결리스트(list) 생성하여 함께 릴리즈되는 기능의 수(cnt)를 순차적으로 add
    (인덱스 없이 뒤에 하나씩 add하고 싶어서 answer[]를 바로 쓰지 않고 LinkedList를 만듦)
  • Queue에서 front, next 하나씩 뽑아서 크기 비교 후 몇 개씩 같이 오픈될 지 cnt로 확인
  • 반복문 종료 후 마지막 cnt값 list에 add
  • cnt 값을 담고 있는 list 값을 answer로 하나씩 이동
  • return answer
import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public static 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 - progresses[i]) / (double)speeds[i]));
        }

        LinkedList<Integer> counts = new LinkedList<>();
        int cnt = 1;
        int front = queue.poll();

        while(!queue.isEmpty()) {
            int next = queue.poll();

            if(front < next) {  // 앞의 값이 뒤의 값보다 작으면 바로 끝, 다시 loop
                counts.add(cnt);
                cnt = 1;
                front = next;
                continue;
            }
            else {  // 앞의 값이 뒤의 값보다 크면 cnt++
                cnt++;
            }
        }
        // 마지막 값 넣기
        counts.add(cnt);
        
        // LinkedList에 있던 값 answer[]으로 이동
        int[] answer = new int[counts.size()];
        for(int i = 0; i < counts.size(); i++) {
            answer[i] = counts.get(i);
        }
        return answer;
    }
}

바로 전에 포스팅한 [프로그래머스] 주식가격 문제와 마찬가지로 이중 for문을 통해서 값을 비교해줄 수도 있을듯한데,
이중 반복문을 사용하지 않고 Stack, Queue 등 자료구조를 활용하는 것의 장점은 무엇일까?
문제 카데고리에 연연하지 않고 해당 문제를 가장 효율적으로 푸는 방법을 고민해봐야겠다.

profile
사부작 사부작

0개의 댓글