반응형
https://programmers.co.kr/learn/courses/30/lessons/42586
Stack 사용
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> countList = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
List<Integer> answerList = new ArrayList<>();
//100%까지 걸린 일자 구하기
for(int i=0; i<progresses.length; i++){
int count = 0;
while(progresses[i] < 100){
progresses[i] += speeds[i];
count++;
}
countList.add(count);
}
//스택에 쌓기
for(int i=countList.size()-1; i>=0; i--){
stack.push(countList.get(i));
}
//하나씩 뽑아내기
while(!stack.isEmpty()){
int cnt = 0;
int pop = stack.pop();
cnt++;
//현재 pop된 값과 다음 값 비교하기
while(!stack.isEmpty() && stack.peek() <= pop){
stack.pop();
cnt++;
}
//리스트에 기능 갯수 넣기.
answerList.add(cnt);
}
//정답 구하기
int[] answer = new int[answerList.size()];
for(int i=0; i<answer.length; i++){
answer[i] = answerList.get(i);
}
return answer;
}
}
Stack 미사용
import java.util.*;
class Solution {
public int[] solution(int[] progresses, int[] speeds) {
List<Integer> countList = new ArrayList<>();
List<Integer> answerList = new ArrayList<>();
//100%까지 걸린 일자 구하기
for(int i=0; i<progresses.length; i++){
int count = 0;
while(progresses[i] < 100){
progresses[i] += speeds[i];
count++;
}
countList.add(count);
}
//list의 remove를 이용해서 계산하기.
while(countList.size() != 0){
int cnt = 0;
int top = countList.remove(0);
cnt++;
while(countList.size() != 0 && countList.get(0) <= top){
countList.remove(0);
cnt++;
}
answerList.add(cnt);
}
//정답 구하기
int[] answer = new int[answerList.size()];
for(int i=0; i<answer.length; i++){
answer[i] = answerList.get(i);
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스 2단계' 카테고리의 다른 글
프로그래머스 2단계 - 주식가격(스택/큐) (0) | 2021.09.13 |
---|---|
프로그래머스 2단계 - 프린터(스택/큐) (0) | 2021.09.09 |
프로그래머스 2단계 - 다리를 지나는 트럭(스택/큐) (0) | 2021.09.09 |
프로그래머스 2단계 - 위장(해쉬) (0) | 2021.09.08 |
프로그래머스 2단계 - 전화번호 목록(해시) (0) | 2021.09.07 |