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

won·2025년 3월 17일
0

알고리즘 문제풀이

목록 보기
33/36

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

반복문과 배열로 풀 수 있는 문제

건물 높이를 n개 받을 때
arr[0],arr[1] / arr[n-2],arr[n-1]
는 0이므로 비교 범위를 j>=2 && j<n-2 로 둔다.

비교군 건물과 양 옆에 있는 건물과의 차이,
두칸 건너에 있는 건물과의 차이를 모두 구해서 별도의 배열(parr)에 넣는다.

건물 높이의 차를 넣어둔 배열을 하나하나 비교하며
양 옆 건물이 더 높은 경우(차이가 -로 나오는 경우)에는 break하여 배열 비교를 멈춘다.
양 옆 건물보다 비교군 건물이 더 높은 경우엔 건물 높이 차 배열에서 가장 작은 값 min을 구한다.
모든 주변 건물 보다 더 높은 경우(parr.length 만큼 비교를 다 한 경우)
결과 값에 min을 더한다.

나머지 건물도 비교한 후 최종 result 값을 출력한다.

import java.io.*;
import java.util.Arrays;

public class day1_View {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = 0;
        //10개의 테스트 케이스
        for(int i=1;i<=10;i++){
            n+=1;

            int N = Integer.parseInt(br.readLine()); // 건물의 갯수 N
            int[] arr = Arrays.stream((br.readLine()).split(" ")).mapToInt(Integer::parseInt).toArray();
            int result = 0;
            //건물 갯수만큼 돌기
            for(int j=0;j<arr.length;j++){
                if(j>=2 && j<N-2 ){
                    int[] parr = new int[4];
                    parr[0] = arr[j] - arr[j-1];
                    parr[1] = arr[j]- arr[j-2];
                    parr[2] = arr[j]- arr[j+1];
                    parr[3] = arr[j] - arr[j+2];
                    int min= parr[0];
                    for(int k = 0; k<parr.length; k++){
                        if(parr[k]<0){
                            break;
                        }else{
                            min=parr[k] < min ? parr[k]:min;
                            if(k==parr.length-1){
                                result +=  min;
                            }
                        }
                    }
                }
            }
            bw.write("#"+i+" "+result+"\n");
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

시간 복잡도 : O(N)
건물의 갯수 N개에 대해 비교하기 때문에..

profile
뭐라도 하자

0개의 댓글