본문으로 바로가기

백준 6198번 옥상 정원 꾸미기 (JAVA)

category 알고리즘/백준 2021. 8. 1. 19:48

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

 

6198번: 옥상 정원 꾸미기

문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으

www.acmicpc.net

스택을 사용하여 풀 수 있는 문제였다. 비슷한 문제의 난이도 상위 버전으로 히스토그램이 있으니, 풀어보는 것을 추천한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.function.Function;

public class Main {
	static Function<String, Integer> stoi = Integer::parseInt;
	static int N;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = stoi.apply(br.readLine());
		long result = 0;
		int tmp;
		Stack<Integer> stack = new Stack<>();
		for (int i = 0; i < N; i++) {
			tmp = stoi.apply(br.readLine());
			while (!stack.isEmpty() && stack.peek() <= tmp) {
				stack.pop();
			}
			result += stack.size();
			stack.add(tmp);
		}
		System.out.println(result);
	}

}