문제
https://school.programmers.co.kr/learn/courses/30/lessons/154539?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
int[] answer=new int[numbers.length];
Arrays.fill(answer, -1);
Stack<Integer> stack=new Stack<>();
for(int i=0; i<numbers.length; i++){
// 스택이 비어있지 않고 top이 numbers[i]보다 작으면
// numbers[i]는 뒷 큰수이다
while(!stack.isEmpty() && numbers[stack.peek()]<numbers[i]){
answer[stack.pop()]=numbers[i];
}
stack.add(i);
}
return answer;
}
}
시간복잡도
n=numbers.length
push, pop연산이 최대 2n번 발생하기 때문에 O(n)
어려웠던 부분
스택에 value말고 index도 넣을 수 있다는 걸 잊지말자
'문제풀이 > 기타' 카테고리의 다른 글
[JAVA] Pro 숫자 카드 나누기 (0) | 2023.07.20 |
---|---|
[JAVA] Pro 귤 고르기 (0) | 2023.07.19 |
[JAVA] Pro 유사 칸토어 비트열 (0) | 2023.07.10 |
[JAVA] [구간합] 백준 11660 구간 합 구하기 5 (0) | 2023.07.09 |
[JAVA] Pro 이모티콘 할인행사 (0) | 2023.07.07 |