티스토리 뷰

728x90

문제

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

 

2493번: 탑

첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1

www.acmicpc.net

 

 

풀이 및 소스코드

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		Stack<Integer> stack = new Stack<>();
		Stack<Integer> idx = new Stack<>();

		int n = Integer.parseInt(br.readLine());
		st = new StringTokenizer(br.readLine());
		stack.push(Integer.parseInt(st.nextToken()));
		idx.push(1);
		sb.append("0");
		for (int i = 1; i < n; i++) {
			int tmp = Integer.parseInt(st.nextToken());

			while(true) {
				if (!stack.empty()) {
					if (stack.peek() >= tmp) {
						sb.append(" "+idx.peek());
						stack.push(tmp);
						idx.push(i + 1);
						break;
					} else {
						stack.pop();
						idx.pop();
					}
				}else {
					sb.append(" 0");
					stack.push(tmp);
					idx.push(i+1);
					break;
				}
			}
		}
		System.out.println(sb);
	}

}
반응형