[SWEA/Java] 1206. [S/W 문제해결 기본] 1일차 - View

권하준·2024년 5월 4일

문제

문제 바로가기

풀이

  • 배열을 순회하면서, 이웃한 배열들을 검사
  • 한 건물의 조망권이 확보된 세대 갯수 = 해당 건물의 높이 - 양 옆으로 이웃한 네개의 건물중 가장 높은 건물 OR 0
  • 배열 인덱싱 에러만 잘 처리하면 쉽게 풀리는 문제

코드

import java.util.*;
import java.io.FileInputStream;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
 
        for(int test_case = 1; test_case <= 10; test_case++)
        {
            int n = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) arr[i] = sc.nextInt();
 
            // 각 건물에 대해 좌 우 2칸씩 중에서 가장 높은 층 파악 후, 해당 건물의 조망 확보 층 계산
            int answer = 0;
            for (int i = 0; i < n; i++){
                int nearbyHeight = 0;
                if (i-2 >= 0 && nearbyHeight < arr[i-2])    nearbyHeight = arr[i-2];
                if (i-1 >= 0 && nearbyHeight < arr[i-1])    nearbyHeight = arr[i-1];
                if (i+1 <= n-1 && nearbyHeight < arr[i+1])    nearbyHeight = arr[i+1];
                if (i+2 <= n-1 && nearbyHeight < arr[i+2])    nearbyHeight = arr[i+2];
 
                answer += Math.max(arr[i] - nearbyHeight, 0);
            }
 
            System.out.printf("#%d %d\n", test_case, answer);
        }
    }
}

결과

profile
자바 BE 개발자 지망생입니다.

0개의 댓글