반응형
Array1) 1204. View_
package array1;
import java.util.Scanner;
import java.io.FileInputStream;
class Solution {
public static void main(String args[]) throws Exception {
// txt 파일 읽어오는 소스코드
// System.setIn(new FileInputStream("res/1206_input.txt"));
Scanner sc = new Scanner(System.in);
// 행, 열, 테스트케이스길이, 정답
int r, c, T;
int ans = 0, secondView = 0;
// 10개의 테스트 케이스 반복
for (int test_case = 1; test_case <= 10; test_case++) {
T = sc.nextInt();
int matrix[][] = new int[255][T];
// 건물 높이 저장
int height[] = new int[T+1];
for (int i = 0; i < T; i++) {
c = sc.nextInt();
height[i] = c;
for (int j = 0; j < c; j++) {
matrix[j][i]++;
}
}
// 자신을 기준으로 양옆 4개의 건물 정렬, 조망권 계산
for (int i = 2; i < T - 1; i++) {
int array[] = new int[5];
for (int j = 0; j <= 4; j++) {
array[j] = height[i+j-2];
}
// array 변수에 자신을 중심으로 5개의 배열 저장, bubble sort를 이용하여 정렬
int temp = 0;
for (int k = array.length-1; k > 0; k--) {
for (int j = 0; j < k; j++) {
if (array[j]>array[j+1]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
// 자신이 제일 큰 수일때 array[4]-array[3]이 조망값이 되므로 ans에 +해준다.
if(height[i] == array[4]) {
ans+=(height[i]-array[3]);
}
}System.out.printf("#%d %d\n", test_case, ans);
ans = 0;
}
}
}
조망값을 어떻게 구할지에 대해서 제일 많이 고민을 했던 것 같다.
자신을 기준으로 왼쪽과 오른쪽 모두 거리 2 이상의 공간이 확보될 떄 조망권이 확보된다고 말하기 때문에
자신을 중심으로 왼쪽, 오른쪽 2개의 건물 중 자신이 가장 높은 건물일 때 자신의 높이 - 두번째로 높은 건물의 높이를 구하면 조망권이 확보된 층 수를 얻을 수 있다.
즉, 자신을 중심으로 왼쪽, 오른쪽 2개를 배열 따로 저장 -> 배열을 bubble sort를 이용하여 오름차순으로 정렬 -> int[4]가 자신일 때 int[4]-int[3]을 하여 조망권이 확보된 층 수를 구하도록 작성해보았다.
반응형
댓글