728x90
풀이
- 기존에 지나온 빌딩 중 새로운 빌당보다 낮은 빌딩만 저장
- 마지막 서있는 곳보다 새로운 빌딩의 높이가 낮으면 같이 지나갈 수 있기 때문
- 스택에 가장 마지막 빌딩 높이(마지막 서있는 곳) <= 새로운 높이
- 새로운 높이보다 큰 거만 남기고 제거
윷놀이처럼 업혀서 간다고 생각하면 이해하기 쉽다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long result = 0;
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < n; i++) {
int tmp = Integer.parseInt(br.readLine());
// 이전에 있는 빌딩 중 새로운 빌딩의 높이보다 낮으면 모두 제거
while (!stack.isEmpty() && stack.peek() <= tmp) {
stack.pop();
}
// 빈 stack or 새로운 빌딩보다 큰 빌딩만 남음.
// 즉, 새로운 빌딩을 볼 수 있는 빌딩들만 남음
stack.push(tmp);
result += stack.size() - 1;
}
System.out.println(result);
}
}
728x90
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준] 7662 이중 우선순위 큐 자바(Java) (0) | 2023.06.19 |
---|---|
[백준] 2493 탑 자바(Java) (0) | 2023.04.10 |
[백준] 1874 스택 수열 자바(Java) (0) | 2023.04.09 |
[백준] 20165 인내의 도미노 장인 호석 자바(Java) (0) | 2023.03.04 |
[백준] 16924 십자가 찾기 자바(Java) (0) | 2023.02.28 |
댓글