728x90
문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader( System.in ) );
int n = Integer.parseInt( br.readLine() );
StringTokenizer st = new StringTokenizer( br.readLine() );
int a[] = new int[n], r[] = new int[n], i;
for( i = 0; i < n; i++ )
a[i] = Integer.parseInt( st.nextToken() );
br.close();
Stack<Integer> s = new Stack<>();
for( i = n-1; i >= 0; i-- ) {
while( !s.isEmpty() && s.peek() <= a[i] )
s.pop();
r[i] = s.isEmpty() ? -1 : s.peek();
s.push( a[i] );
}
StringBuilder sb = new StringBuilder();
for( int rr : r )
sb.append( rr + " " );
System.out.println( sb.toString() );
}
}
* 스택
- 입력받은 배열 a와 같은 크기의 배열 r 생성
- 배열 a를 역순으로 탐색
- 스택의 top이 a[i]보다 작거나 같으면 pop 한다
- 스택이 비었으면 오큰수는 -1, 그렇지 않으면 top이 a[i]의 오큰수( r[i] )가 된댜
- 스택에 a[i]를 넣고 루프 반복
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 백준 온라인 저지 ( BOJ )' 카테고리의 다른 글
[백준(Baekjoon)][자바(java)] 7562 : 나이트의 이동 / DFS와 BFS (0) | 2021.01.21 |
---|---|
[백준(Baekjoon)][자바(java)] 2629 : 양팔저울 / 동적 계획법 2 (0) | 2021.01.21 |
[백준(Baekjoon)][자바(java)] 1010 : 다리 놓기 / 정수론 및 조합론 (0) | 2021.01.21 |
[백준(Baekjoon)][자바(java)] 13305 : 주유소 / 그리디 알고리즘 (0) | 2021.01.21 |
[백준(Baekjoon)][자바(java)] 9184 : 신나는 함수 실행 / 동적 계획법 1 (0) | 2021.01.21 |