반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- 수료
- 진료과별 총 예약 횟수 출력하기
- 소프티어
- 59409
- 후기
- 12930
- 146355
- 해결
- 59412
- PCCP
- 백준
- 165672
- 142085
- 132202
- SSAFY
- 14942
- 정기 코딩 인증평가
- SQL
- 오블완
- 퍼즐 조각 채우기
- 조건에 부합하는 중고거래 상태 구하기
- 설명
- 티스토리챌린지
- MySQL
- 핵심
- 10기
- softeer
- 싸피
- 프로그래머스
Archives
- Today
- Total
개발 쥬스
[프로그래머스/Java] 뒤에 있는 큰 수 찾기 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/154539
고찰 과정
numbers의 최대 크기는 100만이므로 단순 이중 반복문을 활용하여 문제를 해결하려고 하면 시간초과가 발생합니다.
그래서 numbers의 index 정보를 담는 stack 자료구조를 활용하였습니다.
문제의 예시를 활용하여 설명하겠습니다. 예를 들어 다음과 같은 배열이 있다고 가정하겠습니다.
- numbers 배열: [9, 1, 5, 3, 6, 2]
- result 배열: [-1, 5, 6, 6, -1, -1]
numbers 배열은 문제에서 주어진 배열이고, result는 뒷 큰수의 결과 배열입니다. 문제를 보시면 아시겠지만 numbers 배열의 최종 결과 배열인 result를 반환해주어야 합니다. result에서 -1은 뒷 큰수가 없다는 의미이고 다음과 같은 과정으로 뒷 큰수를 구할 수가 있습니다.
이렇게 과정을 구현하면 스택에 남아 있는 인덱스 값들은 뒷큰수가 존재하지 않는 값들의 모임이라는 것이 보장이 되며, 시간 복잡도 O(N)으로 문제를 해결할 수가 있습니다.
코드
import java.util.Stack;
import java.util.Arrays;
class Solution {
private static final int NOTHING = -1;
public int[] solution(int[] numbers) {
int len = numbers.length;
int[] answer = new int[len];
Stack<Integer> stack = new Stack<>();
Arrays.fill(answer, NOTHING);
for (int i = 0; i < len; ++i) {
while (isValid(stack, numbers, i)) {
answer[stack.pop()] = numbers[i];
}
stack.push(i);
}
return answer;
}
private boolean isValid(Stack<Integer> stack, int[] numbers, int index) {
return !stack.isEmpty() && numbers[stack.peek()] < numbers[index];
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/Java] 아날로그 시계 (pccp 기출문제) (0) | 2024.07.29 |
---|---|
[프로그래머스/Java] 표현 가능한 이진트리 (2023 카카오 블라인드 채용 기출) (0) | 2024.07.29 |
[프로그래머스/Java] 호텔 대실 (0) | 2024.07.26 |
[프로그래머스/Java] 석유 시추(pccp 기출 문제) (2) | 2024.07.26 |
[프로그래머스/Java] 무인도 여행 (0) | 2024.07.26 |