[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개에 대해 비교하기 때문에..