문제 접근
조망권 확보를 하려면 양 옆 2공간이 비어야한다.
그러려면 빌딩의 높이가 양 옆 2칸에 있는 빌딩들의 높이보다 높아야한다.
배열로 빌딩들의 높이를 저장하고 반복문을 돌면서 -2, +2인덱스에 있는 빌딩 높이와 비교 후 작다면 다음 빌딩 검사,
크다면 현재 빌딩 높이에서 -2 ~ +2 빌딩 중 가장 큰 높이를 빼주면 조망권을 확보한 세대 수가 된다.
이 작업을 마지막 빌딩(N-3)까지 반복
++ -2 ~ +2까지 매 번 높이를 비교했는데 이제 보니 이러면 +1까지 높이를 저장했다가 +2에서 continue로 넘어갈 수도 있겠다싶더라
-2 ~ +2까지 다 검사 후에 빌딩 높이를 저장해주는 게 좋을까?
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int t=1; t<=10; t++) {
int N = Integer.parseInt(br.readLine()); // 건물 수
int[] building = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) building[i] = Integer.parseInt(st.nextToken());
int count = 0;
// 조건문 4개를 쓰던가, 반복문 2개로 현재 양 옆 빌딩 검사하던가
for(int i=2; i<N-2; i++) {
int maxHeight = 0;
if(building[i-2] > building[i]) continue;
maxHeight = Math.max(maxHeight, building[i-2]);
if(building[i-1] > building[i]) continue;
maxHeight = Math.max(maxHeight, building[i-1]);
if(building[i+1] > building[i]) continue;
maxHeight = Math.max(maxHeight, building[i+1]);
if(building[i+2] > building[i]) continue;
maxHeight = Math.max(maxHeight, building[i+2]);
count += building[i] - maxHeight;
}
System.out.println("#"+t+" "+count);
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA / 파리 퇴치 / JAVA] (0) | 2023.05.15 |
---|---|
[SWEA / Flattern / JAVA] (0) | 2023.05.14 |
[SWEA / 구구단 걷기 / JAVA] (1) | 2023.05.11 |
[SWEA / 원 안의 점 / JAVA] (0) | 2023.05.09 |
[SWEA / 아름이의 돌 던지기 / JAVA → C++] (0) | 2023.05.08 |
댓글