728x90
https://school.programmers.co.kr/learn/courses/30/lessons/154539
728x90
메모리: 204 MB, 시간: 28.85 ms
사용 알고리즘: 다이나믹 프로그래밍
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
// numbers의 길이
int n = numbers.length;
// 뒷 큰수의 인덱스를 담은 배열
int[] dp = new int[n];
dp[n - 1] = n; // 가장 마지막 정수는 뒷 큰수가 없음
// 뒷 큰수를 담은 배열
int[] answer = new int[n];
Arrays.fill(answer, -1);
for(int i = n - 2; i >= 0; i--) { // 뒤에서부터 시작
dp[i] = i + 1; // 처음 뒷 큰수는 바로 뒤를 참조
// 현재 numbers[dp[i]]가 numbers[i]보다 작으면
// 다음으로 numbers[dp[i]]보다 큰 수인 dp[dp[i]]로 이동
while(dp[i] < n && numbers[dp[i]] <= numbers[i]) {
dp[i] = dp[dp[i]];
}
if(dp[i] != n) answer[i] = numbers[dp[i]];
}
return answer;
}
}
728x90
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스, 81301] 숫자 문자열과 영단어 (java) (0) | 2024.10.01 |
---|---|
[프로그래머스, 42587] 프로세스 (java) (0) | 2024.09.27 |
[프로그래머스, 1844] 게임 맵 최단거리 (java) (4) | 2024.09.24 |
[프로그래머스, 131127] 할인 행사 (java) (0) | 2024.09.20 |
[프로그래머스, 42889] 실패율 (java) (1) | 2024.09.12 |