- 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 풀이
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
//답안의 크기는 numbers와 같기 때문이 미리 선언해줍니다.
int[] answer = new int[numbers.length];
//Stack을 이용해 문제를 풀이합니다.
//Stack에 numbers 값들의 index를 넣어 비교를 진행합니다.
Stack<Integer> st = new Stack<>();
//시작시에 첫번째 numbers 값인 0번 인덱스를 넣어줍니다.
st.add(0);
//이제 두번째 수 부터 탐색을 시작합니다.
for(int i=1; i<numbers.length; i++){
//현재 index의 값을 now에 담아줍니다.
int now = numbers[i];
//만약 탐색 진행 중 stack이 비어있다면, 비교 할 수가 없으므로
//그대로 stack에 i를 추가해줍니다.
if(st.isEmpty()){
st.add(i);
//stack이 비어있지 않다면 비교를 시작합니다.
//stack에 남아있는 수들은 "현재까지 해당 수보다 큰 수가 발견되지 않았다"를 의미합니다.
//즉 이번 i번째 수가 그들보다 클 수 있기 때문에 while을 통해 모두 확인합니다.
} else {
//now가 stack의 수보다 클 경우 pop을 통해 꺼내주고
//answer의 해당 index에 표시를 해줍니다.
//이렇게 pop()을 하다가 stack이 비어질 수 있으니
//isEmpty()를 통해 비어있는지도 확인해줍니다.
while(!st.isEmpty() && numbers[st.peek()]<now){
answer[st.pop()] = now;
}
//이번 now에 대한 탐색이 끝나면 현재 수는 stack에 추가해줍니다.
st.add(i);
}
}
//위의 for문이 끝날 때까지 stack에 남아있는 수들은
//끝까지 보다 큰 수가 나타나지 않았다는 뜻입니다.
//해당 index의 위치에는 모두 -1을 담아줍니다.
for(int i : st){
answer[i] = -1;
}
//만들어진 answer 배열을 반환합니다.
return answer;
}
}
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 더 맵게, java (0) | 2025.02.03 |
---|---|
[프로그래머스] 모음사전, java (0) | 2025.01.31 |
[프로그래머스] 정수 삼각형, java (0) | 2025.01.31 |
[프로그래머스] 롤케이크 자르기, java (0) | 2025.01.31 |
[프로그래머스] 타겟 넘버, java (0) | 2025.01.28 |