본문 바로가기
알고리즘 문제 풀이/프로그래머스

프로그래머스 : 기능개발

by 성건희 2021. 8. 11.
반응형

본 풀이는 java 언어를 사용하였습니다.

문제 보러가기

 

풀이

정답의 개수가 가변적으로 변하므로 ArrayList 로 선언해주었고, 해당 일자에 해당하는 변수를 선언 해 주었다.

List<Integer> answer = new ArrayList<>();
int day = 0;

 

그 후 progresses 를 순회하면서 작업의 남은 진도필요한 일 수를 계산하였다.

for (int i = 0; i < progresses.length; i++) {
    int leftProgress = 100 - progresses[i]; // 남은 진도
    int requireDay = leftProgress / speeds[i]; // 필요한 일 수

    if (leftProgress % speeds[i] != 0) { // 나머지 값이 있으면 1일 더해줌
        requireDay++;
    }

    ...
}

 

앞의 작업이 100% 완료가 되어야 뒤의 작업을 진행할 수 있기 때문에 아래와 같이 조건을 추가했다.

...
  
if (day < requireDay) { // 뒤의 작업일자가 더 큰 경우
    day = requireDay;
    answer.add(1); // 다른 일자에 배포되므로 다음 위치에 1을 추가해줌
    continue;
}

answer.set(answer.size() - 1, answer.get(answer.size() - 1) + 1); // 뒤의 작업일자가 더 작거나 같은 경우, 해당 배포일자에 값을 1 더해줌

 

위의 과정을 진행하면 answer 의 값에 정답이 들어감.

리턴 타입이 int 배열이므로 arrayList를 int 배열로 변환해준다.

int[] result = new int[answer.size()];
for (int i = 0; i < answer.size(); i++) {
    result[i] = answer.get(i);
}
return result;

 

전체 코드

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public int[] solution(int[] progresses, int[] speeds) {
        List<Integer> answer = new ArrayList<>();
        int day = 0;

        for (int i = 0; i < progresses.length; i++) {
            int leftProgress = 100 - progresses[i];
            int requireDay = leftProgress / speeds[i];

            if (leftProgress % speeds[i] != 0) {
                requireDay++;
            }

            if (day < requireDay) {
                day = requireDay;
                answer.add(1);
                continue;
            }

            answer.set(answer.size() - 1, answer.get(answer.size() - 1) + 1);
        }

        int[] result = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++) {
            result[i] = answer.get(i);
        }
        return result;
    }
}

 

회고

스택과 큐를 이용해서 어떻게 처리해야 할지 도무지 모르겠다보니, 지나님의 블로그를 참조했다.

그런데 정작 스택과 큐를 이용하지 않고도 문제를 풀 수 있었음..

매일 문제를 열심히 풀어야겠다..

 

참고

반응형

댓글