[D3] SWEA 1206 [S/W 문제해결 기본] 1일차 - View - Java
by Rev_SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
첫 번째 D3 문제라 살짝 긴장했는데(?) 생각보다 어렵진 않았다.
배열을 만들어서 앞 뒤 2칸씩의 값을 검증하기만 하면 되는 문제였다.
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class S_1206 {
static int[] height;
// View
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < 10; i++) { // test case
int n = Integer.parseInt(br.readLine()); // 건물의 개수
String s = br.readLine();
String[] arr = s.split(" "); // 건물 높이 배열
height = new int[n];
for (int j = 0; j < n; j++) {
height[j] = Integer.parseInt(arr[j]);
}
int res = 0;
for (int j = 2; j < n - 2; j++) {
res += view(j);
}
System.out.println("#" + (i+1) + " " + res);
}
}
static int view(int i) {
int a = height[i-2];
int b = height[i-1];
int c = height[i+1];
int d = height[i+2];
if (height[i] <= a || height[i] <= b || height[i] <= c || height[i] <= d) {
return 0;
}
int max = Math.max(Math.max(Math.max(a, b), c), d);
return height[i] - max;
}
}
배열을 돌며 해당 빌딩이 조망권이 확보 되어 있는지 검증하는 함수 view()를 구현하였다.
view 함수를 살펴보도록 하자.
int a = height[i-2];
int b = height[i-1];
int c = height[i+1];
int d = height[i+2];
if (height[i] <= a || height[i] <= b || height[i] <= c || height[i] <= d) {
return 0;
}
일단 조망권이 되려면? 앞과 뒤 2칸에서 자기보다 큰 빌딩이 하나도 없어야 한다.
기준이 되는 빌딩 근처 2칸에 더 큰 빌딩이 있다면, 해당 빌딩은 조망권이 없기 때문에 0을 반환한다.
int max = Math.max(Math.max(Math.max(a, b), c), d);
return height[i] - max;
위의 if문을 통과한 빌딩은 근처 2칸 이내 제일 큰 빌딩이다.
그럼 이제 조망권을 몇 세대 확보할 수 있는지 구해야할 것이다. 우리가 앞서 본 4개의 근처 빌딩들 중에서 가장 높은 빌딩의 높이를 뺀 값이 조망권을 확보한 세대수 일 것이다.
int res = 0;
for (int j = 2; j < n - 2; j++) {
res += view(j);
}
System.out.println("#" + (i+1) + " " + res);
그 값을 반환해준 후 main문에서 값을 계속 더해나간다!
그러면 값을 구할 수 있다.
처음에 건물의 개수를 입력하는 n이 맨 앞과 뒤 0 0 값을 포함하는건지 모르고.... 배열을 n+4의 크기로 생각하고 계산했다가 계속 인덱스 오류가 났다😇 하하... 그냥 건물의 개수 n = 입력되는 값의 개수 라고 생각하면 될 것 같다.
'PS > PS' 카테고리의 다른 글
[D2] SWEA 1974 스도쿠 검증 - Java (0) | 2022.10.26 |
---|---|
[D2] SWEA 2001 파리 퇴치 - Java (0) | 2022.10.26 |
[D2] SWEA 1928 Base64 Decoder - Java (0) | 2022.10.25 |
[D2] SWEA 2007 패턴 마디의 길이 - Java (0) | 2022.10.25 |
[D2] SWEA 1859 백만 장자 프로젝트 - Java (0) | 2022.10.24 |
블로그의 정보
Hi Rev
Rev_