https://school.programmers.co.kr/learn/courses/30/lessons/154539
문제 >>
주어진 배열에서 자신의 위치 바로 뒤에 있는 큰 수가 무엇인지 찾는 문제
풀이 >>
numbers를 순회하면서 stack 에 담겨있는 숫자가 numbers 보다 작으면 해당 숫자를 pop 시키고
크면 stack 순회를 멈추고 numbers[i]를 저장한다.
현재 숫자(numbers[i]) 가 stack의 최상단에 있는 숫자보다 크다는 것을 만족하지 못하면 어차피 이전에 쌓인 숫자들도 numbers[i]보다 크기 때문에 더 순회하지 않아도 된다.
int[2] 인 배열을 선언하여 [0] = 숫자 [1] = 인덱스 로 판단했다.
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer = new int[numbers.length];
Arrays.fill(answer, -1);
Stack<int[]> stack = new Stack<>();
stack.push(new int[]{numbers[0], 0});
for(int i = 1; i<numbers.length; i++) {
int num = numbers[i];
while (!stack.isEmpty() && stack.peek()[0] < num) {
int[] pop = stack.pop();
answer[pop[1]] = num;
}
stack.push(new int[]{num, i});
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 숫자 변환하기 (자바) (0) | 2023.05.08 |
---|---|
[프로그래머스] 미로 탈출 (자바) (0) | 2023.05.04 |
[프로그래머스] 2023 KAKAO BLIND - 표현 가능한 이진트리 (자바) (0) | 2023.04.21 |
[프로그래머스] 2023 KAKAO BLIND 코딩테스트 - 이모티콘 할인행사 (0) | 2023.04.20 |
[프로그래머스] 광물 캐기 (자바) (0) | 2023.04.18 |