devFancy BE Developer

[Programmers] 42586. 기능개발

2023-03-28
devFancy

문제 링크

성능 요약

  • 메모리: 79.3 MB, 시간: 0.45 ms

구분

  • 코딩테스트 연습 > 스택/큐

Answer Code1(23.03.28)

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        Queue<Integer> q = new LinkedList<>();
        List<Integer> answerList = new ArrayList<>();
        
        for(int i = 0; i < speeds.length; i++) {
            double remain = (100 - progresses[i]) / (double) speeds[i];
            int date = (int) Math.ceil(remain); //Math.ceil: 올림
            
            if(!q.isEmpty() && q.peek() < date) { //3 < 5
                answerList.add(q.size());
                q.clear();
            }
            q.offer(date);
        }
        
        answerList.add(q.size());
        
        int[] answer = new int[answerList.size()];
        
        for(int i = 0; i < answer.length; i++) {
            answer[i] = answerList.get(i);
        }
        
        return answer;
    }
}

Review

  • 스택/큐로 구현하는 아이디어가 도저히 떠오르지 않아 정답 풀이를 보고 다시 풀었다.

  • 정답 풀이에서 if(!q.isEmpty() && q.peek() < date) 에 대한 해석이 한 번에 와닿지 않아서, queue에 대한 개념과 메서드들을 자바의 정석 책을 통해 다시 공부하게 되었다.

    • 현재 큐가 비어있지 않고, 큐에 있는 값이 date 값보다 작은 경우를 의미한다.

    • 즉, 뒤에 있는 기능이 먼저 개발되더라도 앞에 있는 기능이 배포될때 함께 배포된다는 의미는 q에서 값을 비운다는 것이다.

  • 이해하기 어려워서 해당 문제는 나중에 다시 풀어보자.


Comments

Index