처음엔 현재 건물이 좌우 건물보다 높으면 그 건물과 높이 차이를 각각 계산해서 min 값을 계산했다.
if문이 많기도 하고 보기 싫어져서 수정했다.
for (int i=2; i<N-2; i++) {
if (building[i] > building[i-2] && building[i] > building[i-1] && building[i] > building[i+1] && building[i] > building[i+2]) {
int view = 255;
if (building[i] > building[i-2]) {
view = Math.min(view, building[i] - building[i-2]);
}
if (building[i] > building[i-1]) {
view = Math.min(view, building[i] - building[i-1]);
}
if (building[i] > building[i+2]) {
view = Math.min(view, building[i] - building[i+2]);
}
if (building[i] > building[i+1]) {
view = Math.min(view, building[i] - building[i+1]);
}
answer += view;
}
}
제출한 코드는 아래와 같다.
package swea;
// [S/W 문제해결 기본] 1일차 - View
import java.util.Scanner;
public class p1206_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int t=1; t<=10; t++) {
int N = sc.nextInt();
int answer = 0;
int[] building = new int[N];
for (int i=0; i<N; i++) {
building[i] = sc.nextInt();
}
for (int i=2; i<N-2; i++) {
if (building[i] > building[i-2] && building[i] > building[i-1] && building[i] > building[i+1] && building[i] > building[i+2]) {
answer += building[i] - Math.max(Math.max(building[i-2], building[i-1]), Math.max(building[i+1], building[i+2]));
}
}
System.out.printf("#%d %d\n", t, answer);
}
}
}