본문 바로가기
코딩테스트/SWEA

[JAVA] SWEA 1206번 View

by PEKAH 2021. 7. 26.

문제

강변에 빌딩들이 옆으로 빽빽하게 밀집한 지역이 있다.


이곳에서는 빌딩들이 너무 좌우로 밀집하여, 강에 대한 조망은 모든 세대에서 좋지만 왼쪽 또는 오른쪽 창문을 열었을 때 바로 앞에 옆 건물이 보이는 경우가 허다하였다.


그래서 이 지역에서는 왼쪽과 오른쪽으로 창문을 열었을 때, 양쪽 모두 거리 2 이상의 공간이 확보될 때 조망권이 확보된다고 말한다.


빌딩들에 대한 정보가 주어질 때, 조망권이 확보된 세대의 수를 반환하는 프로그램을 작성하시오.


아래와 같이 강변에 8채의 빌딩이 있을 때, 연두색으로 색칠된 여섯 세대에서는 좌우로 2칸 이상의 공백이 존재하므로 조망권이 확보된다. 따라서 답은 6이 된다.


A와 B로 표시된 세대의 경우는 왼쪽 조망은 2칸 이상 확보가 되었지만 오른쪽 조망은 한 칸 밖에 확보가 되지 않으므로 조망권을 확보하지 못하였다.


C의 경우는 반대로 오른쪽 조망은 2칸이 확보가 되었지만 왼쪽 조망이 한 칸 밖에 확보되지 않았다.

제약 사항

가로 길이는 항상 1000이하로 주어진다.


맨 왼쪽 두 칸과 맨 오른쪽 두 칸에는 건물이 지어지지 않는다. (예시에서 빨간색 땅 부분)


각 빌딩의 높이는 최대 255이다.

입력

입력 파일의 첫 번째 줄에는 테스트케이스의 길이가 주어진다. 그 바로 다음 줄에 테스트 케이스가 주어진다.


총 10개의 테스트케이스가 주어진다.

출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 조망권이 확보된 세대의 수를 출력한다.

풀이

1차원 배열을 만들어 각 인덱스의 좌우 2칸을 확인하여 값을 도출하면 되는 문제이다.

 

우선 왼쪽의 1, 2칸과 오른쪽의 1, 2칸의 값을 구한다.

 

그 값이 비교하려는 값 B보다 크다면 B는 조망권을 가질 수 없다는 뜻이되고,

 

그렇지 않을 경우에는 좌우의 1, 2칸의 값 중 큰 값과, 좌우 중 큰 값을 구해 B와의 차를 구하면

 

간단하게 문제를 해결 할 수 있다.

 

import java.util.Scanner;
import java.io.FileInputStream;

class View {
	public static void main(String args[]) throws Exception {
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();
		
		for(int test_case = 1; test_case <= T; test_case++){
			int buildingNum = sc.nextInt();
			int [] buildings = new int[buildingNum];
			int answer = 0;
			
			for (int i = 0; i < buildings.length; i++) {
				buildings[i] = sc.nextInt();
			}
			
			for (int i = 2; i < buildings.length - 2; i++) {
				int checkL = Math.max(buildings[i-1], buildings[i-2]);
				int checkR = Math.max(buildings[i+1], buildings[i+2]);
				
				if (buildings[i] < checkL || buildings[i] < checkR) {
					continue;
				}
				
				int views = Math.max(checkL, checkR);
				answer += buildings[i] - views;
			}
			
			System.out.println("#" + test_case + " " + answer);
		}
	}
}

 

 

'코딩테스트 > SWEA' 카테고리의 다른 글

[JAVA] SWEA 1210번 Ladder1  (0) 2021.07.27
[JAVA] SWEA 1220번 Magnetic  (0) 2021.07.27
[JAVA] SWEA 1209번 Sum  (0) 2021.07.27
[JAVA] SWEA 1208번 Flatten  (0) 2021.07.26
[JAVA] SWEA 1204번 최빈수 구하기  (0) 2021.07.26

댓글