반응형
본 풀이는 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;
}
}
회고
스택과 큐를 이용해서 어떻게 처리해야 할지 도무지 모르겠다보니, 지나님의 블로그를 참조했다.
그런데 정작 스택과 큐를 이용하지 않고도 문제를 풀 수 있었음..
매일 문제를 열심히 풀어야겠다..
참고
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
2019 KAKAO BLIND RECRUITMENT 오픈채팅방 (0) | 2022.07.07 |
---|---|
프로그래머스 : 완주하지 못한 선수 (0) | 2021.08.13 |
프로그래머스 : 크레인 인형뽑기 게임 (0) | 2020.04.03 |
2020 KAKAO BLIND RECRUITENT : 자물쇠와 열쇠 (0) | 2020.01.23 |
2020 KAKAO BLIND RECRUITENT : 괄호 변환 (0) | 2020.01.21 |
댓글