[白俊-java]6198号:屋上ガーデンを飾る
質問する
https://www.acmicpc.net/problem/6198
説明:
スタックを使うと簡単に解決できる問題です!
(1)前に入ったビルで新しいビルが見える->前のビルの高さが入力したビルの高さより高い(stack.peek()>height)
(2)以前に入ったビルでは新しいビルが認識できない->以前のビルの高さが入力したビルの高さより低い(stack.peek()<=height)
-> while (!stack.isEmpty() && stack.peek()<=height部
-> result += stack.size();
建物の個数の範囲は(1≦N≦80000)であるため、結果の範囲はintを超える可能性があるため、intではなくlongと宣言すべきである.
ソースコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
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());
Stack<Integer> stack = new Stack<>();
long result = 0;
for (int i = 0; i < N; i++) {
int height = Integer.parseInt(br.readLine());
// 입력 받은 건물의 높이보다 작거나 같은 건물은 스택에서 삭제 -> 이전에 들어온 빌딩에서 새로운 빌딩을 확인할 수 없는 경우(높이가 더 높기 때문에 불가능)
while (!stack.isEmpty() && stack.peek() <= height) {
stack.pop();
}
result += stack.size();
stack.push(height);
}
System.out.println(result);
}
}
GITHUB
https://github.com/MinchaeGwon/BOJ/blob/master/BOJ%236198/src/Main.java
Reference
この問題について([白俊-java]6198号:屋上ガーデンを飾る), 我々は、より多くの情報をここで見つけました https://velog.io/@minchae75/백준-java-6198번-옥상-정원-꾸미기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol