Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 17298. 오큰수 본문

카테고리 없음

[BAEKJOON] 17298. 오큰수

코드와이 2021. 8. 16. 20:19

 

문제링크

https://www.acmicpc.net/problem/17298

 

17298번: 오큰수

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

www.acmicpc.net

 

package acmicpc.Gold4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;


public class 오큰수 {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		
		int n = Integer.parseInt(br.readLine());
		// input data 저장할 배열
		int[] arr = new int[n];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < n ; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		// index 저장할 stack
		Stack<Integer> stack = new Stack<>();
		
		stack.add(0);
		
		for(int i = 1 ; i < n ; i++) {
			
			// stack.peek 보다 작으면 stack 에 index 추가
			if(arr[stack.peek()] >= arr[i]) {
				stack.add(i);
			} else {
				
				// stack 사이즈가 0이 아니고 peek 보다 크다면 그 인덱스에 위치한 값을 -1 로 변경해주기
				while(stack.size() != 0 && arr[stack.peek()] < arr[i]) {
					arr[stack.pop()] = arr[i];
				}
				stack.add(i);
			}
		}
		
		for(int x : stack) arr[x] = -1;
		
		
		for(int x : arr) {
			sb.append(x).append(" ");
		}
		
		System.out.println(sb);
		
	}

}