[SWEA] 1206. View _ JAVA

jii0_0·2022년 8월 11일
0

SW Expert Academy

목록 보기
2/33
post-thumbnail

[S/W 문제해결 기본] 1일차 - View (D3)

문제 링크

  • 조망이 좋은 아파트 층수를 세는 문제이다.
  • 양옆으로 각 두개의 건물이 현재의 건물보다 낮다면 조망권을 확보한다.
  • 높은 건물에서도 조망권을 확보한 층수를 계산하여 조망권이 확보된 총 수를 계산한다.

좌우로 두개씩 각각 min값 계산

처음엔 현재 건물이 좌우 건물보다 높으면 그 건물과 높이 차이를 각각 계산해서 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;
	}
}

Solution

제출한 코드는 아래와 같다.

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);
		}
	}
}
profile
느려도 꾸준히

0개의 댓글