SW Expert Academy <View>
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV134DPqAA8CFAYh
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
View
왼쪽과 오른쪽 창문을 열었을 때, 양 쪽 모두 거리 2 이상의 공간이 확보되었을 때, 조망권이 확보된다고 말한다.
빌딩들에 대한 정보가 주어질 때, 조망권이 확보된 세대의 수를 구하여라.
입력으로 10개의 테스트 케이스가 들어온다.
테스트 케이스는 첫 줄에 빌딩 지역의 길이가 주어지고 그 다음 줄에 각 빌딩 지역으 빌딩 높이가 공백으로 구분되어 들어온다. (맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 지어지지 않는다.)
출력으로 각 테스트 케이스에 대해 조망권이 확보된 세대의 수를 구하여 출력하면 된다.
문제 해결
각 건물을 기준으로 앞 건물, 앞앞 건물, 뒤 건물, 뒤뒤 건물의 높이에 대해 확인하면 된다.
만약 현재 건물을 기준으로 앞 건물, 앞앞 건물, 뒤 건물, 뒤뒤 건물의 높이가 현재 건물의 높이보다 높다면 모두 조망권이 확보되지 않았으므로 넘어간다.
현재 건물을 기준으로 앞 건물, 앞앞 건물, 뒤 건물, 뒤뒤 건물의 높이 중 가장 높은 건물의 높이를 구한다.
(현재 건물의 높이) - (4개의 건물 중 가장 높은 건물의 높이) 의 값이 현재 건물에서 조망권을 확보한 세대의 수이다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int testcase = 1; testcase < 11; testcase++) {
int n = Integer.parseInt(br.readLine());
String[] inArr = br.readLine().split(" ");
int[] height = new int[n];
for(int i = 0; i < n; i++) {
height[i] = Integer.parseInt(inArr[i]);
}
int answer = 0;
for(int i = 2; i < n-2; i++) {
if(height[i] <= height[i+1] || height[i] <= height[i+2] || height[i] <= height[i-1] || height[i] <= height[i-2] ) {
continue;
}
int temp1 = Math.max(height[i-1], height[i-2]);
int temp2 = Math.max(height[i+1], height[i+2]);
int highest = Math.max(temp1, temp2);
answer += height[i] - highest;
}
System.out.println("#" + testcase + " " + answer);
}
}
}
결과
728x90
'Algorithm' 카테고리의 다른 글
Softeer <회의실 예약> (0) | 2022.05.18 |
---|---|
백준 1021번 <회전하는 큐> (0) | 2022.05.16 |
[SW Expert Academy] 1859번 <백만 장자 프로젝트> (0) | 2022.05.12 |
백준 1780번 <종이의 개수> (0) | 2022.05.10 |
백준 2504번 <괄호의 값> (0) | 2022.05.10 |
댓글