알고리즘 스터디 (기능개발[프로그래머스 42586])

박윤택·2022년 5월 27일
2

알고리즘

목록 보기
11/25

문제


문제 이해

  • progresses : 각각의 진도
  • speeds : 각각의 속도
  • return : 앞선 작업이 완료되었을 때 완료된 작업의 개수 리스트

각각의 진도율에 각각의 속도가 하루가 지나면서 더해진다.


코드

import java.util.*;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        int pointer = 0; // 현재 가르키는 index
        int count = 0; // 완료된 개수
        int[] answer = {}; // return 
        
        // 해당 index가 progressess를 다 탐색할때까지 반복
        while (pointer < progresses.length) {
        
       	  // 하루가 지나면 각각의 속도를 더해준다
          for (int i = pointer; i < progresses.length; i++)
            progresses[i] += speeds[i];
          
          // 완료된 개수 초기화  
          count = 0;

          // 완료된 개수 확인하는 로직
          while (pointer < progresses.length && progresses[pointer] >= 100) {
            pointer++;
            count++;
          }
          
          // 완료된 것이 있으면 answer에 저장
          if (count != 0) {
            // 임시 배열을 선언하고 완료된 개수 하나 저장
            int[] temp = new int[] { count };
            // answer 배열 길이 1씩 더 늘려줌
            answer = Arrays.copyOfRange(answer, 0, answer.length + 1);
            // answer에 temp값 넣기
            System.arraycopy(temp, 0, answer, answer.length - 1, temp.length);
          }
        }

        return answer;
    }
}

코드 설명

progeresses는 int array인데 이를 pointer를 이용해서 어떤 값을 가르키고 있는지를 인식해서 Queue처럼 사용하고자 한다.

  1. pointer가 progresses 끝까지 탐색할 때까지 while문을 돌린다. 즉, 작업이 완료된 기능들은 무시를 해버린다.
  2. 하루가 지날때마다 각각의 진도율에 속도를 더해준다
  3. 완료된 개수를 초기화 해준다.
  4. 완료된 개수를 확인한다. 이때 완료가 된 기능이 있다면 다음 진도를 확인해야하므로 pointer를 1씩 증가시켜주고 완료된 개수를 세야하므로 count또한 1씩 증가시켜 준다.
  5. count가 0이 아니라면 완료된 기능이 있으므로 이를 answer 배열에 넣어준다.


0개의 댓글