❓ 문제 -프로그래머스 코딩테스트 고득점 Kit 기능개발 - JAVA 풀이법
출처
(https://school.programmers.co.kr/learn/courses/30/lessons/42586)
📝 문제해결법
1. 스택 활용
- 배포되어야 하는 순서를 반대로 각 기능 진도 100%가 되기 위해 며칠이 걸리는지를 stack에 push 해준다.
- stack에서 하나씩 꺼내서 현재 기능을 배포할 때 걸리는 일수보다 작은 것이 뒤에 기능에 존재하는지를 체크하여 자신의 일수보다 작거나 같으면 같이 배포 하도록 구현한다.
- 따라서 while문을 통해 현재 pop한 num보다 작거나 같은 스택의 top을 계속 체크하구 만약 같이 배포할 수 있을 경우 pop을 하며 count를 1증가시켜주면서 같은 시점에 배포할 기능을 카운트 해준다.
2. 느낀점
- 스택/큐라는 분류를 봐서.. 이미 해결 알고리즘을 생각하고 구현하니깐 쉬운 부분이 있었다.
- 스택이 이런 방식으로도 해결될 수 있구나...
💻 소스코드
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
Stack<Integer> stack = new Stack<>();
for(int i=progresses.length-1;i>=0;i--){
int diff = 100 - progresses[i];
if(diff%speeds[i] > 0){
stack.push(diff/speeds[i] + 1);
} else {
stack.push(diff/speeds[i]);
}
}
ArrayList<Integer> list = new ArrayList<Integer>();
while(!stack.isEmpty()){
int count = 1;
int num = stack.pop();
//System.out.println("num "+num);
while(!stack.isEmpty()){
int num2 = stack.peek();
//System.out.println("num2 "+num2);
if(num < num2){
break;
} else {
count++;
stack.pop();
}
}
list.add(count);
}
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++){
answer[i] = list.get(i);
}
return answer;
}
}
'알고리즘 > 알고리즘문풀' 카테고리의 다른 글
BOJ - 거울 설치 2151번 (JAVA) (0) | 2022.07.15 |
---|---|
BOJ - 텔레포트3 12908번 (JAVA) (0) | 2022.07.13 |
BOJ - 열쇠 9328번 (JAVA) (0) | 2022.06.30 |
2022 KAKAO BLIND RECRUITMENT - 사라지는 발판 (JAVA) (0) | 2022.06.24 |
2022 KAKAO BLIND RECRUITMENT - 파괴되지 않은 건물 (JAVA) (0) | 2022.06.22 |