담배팔이소년
[BOJ] 06198 옥상 정원 꾸미기 본문
https://www.acmicpc.net/problem/6198
6198번: 옥상 정원 꾸미기
문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으
www.acmicpc.net
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
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());
int[] heights = new int[N+1];
for(int i=0; i<N; i++)
heights[i] = Integer.parseInt(br.readLine());
heights[N] = 1000000001;
long ans = solve(heights);
System.out.println(ans);
}
public static long solve(int[] heights) {
int N = heights.length-1;
int[] view = new int[N+1];
view[N-1] = N;
for(int i=N-2; i>=0; i--) {
if(heights[i] <= heights[i+1])
view[i] = i+1;
else {
int idx = view[i+1];
while((heights[i] > heights[idx]))
idx = view[idx];
view[i] = idx;
}
}
return calc(view);
}
public static long calc(int[] view) {
long ret = 0;
int N = view.length - 1;
for(int i=0; i<N; i++) {
ret += (view[i] - i);
}
return ret - N;
}
}
'Algorithm' 카테고리의 다른 글
[BOJ] 02116 주사위 쌓기 (0) | 2023.09.06 |
---|---|
[SWEA] 3238 이항계수 구하기 (0) | 2023.07.31 |
[BOJ] 13459 구슬 탈출 (1) | 2023.07.12 |
[BOJ] 17836 공주님을 구해라! (0) | 2023.07.03 |
[BOJ] 02636 치즈 (0) | 2023.06.30 |
Comments