티스토리 뷰

-문제링크

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

이런식으로 건물이 줄서있는 .. 나라가있다고치자..

얘들은 건물을 일자로 세워둔다

그리고 양끝 두칸은 무조건 건물을 세우지 않는다

아파트에 살때 양옆으로 두칸씩 건물이 없는경우에 view가 좋단다 

그래서 그림처럼 초록색 색칠된부분이 view가 좋은 층이다

 

인풋으로는 숫자들이 들어오는데 

100

0 0 1 3 5 ...

이런식으로 들어온다 첫줄 100은 건물의 수이고 그다음줄 부터는 그 100개 건물들의 높이다

(참고로 양끝 건물 없는 0 0 과 건물 사이에 건물이 없는 0 도 100에 포함된다 이거때문에 문제를 계속 틀렸었다^^!!!! 한시간은 버렸다)

테스트케이스는 총 10개이다

출력은

#테스트케이스번호 좋은view수

로 하면된다


-발상

아이디어는 금방 떠올랐다. . .

체크를 원하는 건물의 높이와 해당 건물 양옆 4개의 건물들 높이를 보고 양옆 4개 건물중 가장 높은애를 찾는다

그리고 가장 높은애가 체크 대상 건물 높이보다 작다면.. 두 건물의 차이가 체크 대상 건물에서 view좋은 층의 수이다.


-코드

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


class Solution
{
	public static void main(String args[]) throws Exception
	{
		
		Scanner sc = new Scanner(System.in);
		int T;
		T=10;
		
		for(int test_case = 1; test_case <= T; test_case++)
		{
			int goodView=0;
			int buildingCount=sc.nextInt();
            ArrayList <Integer>buildings=new ArrayList<Integer>();
            for(int i=0;i<buildingCount;i++){//테스트케이스의 건물높이들을 buildings에 저장
                int t=sc.nextInt();
                buildings.add(t);
            }
            for(int i=2;i<buildingCount-2;i++){
            	int height=buildings.get(i);//view 체크 대상 빌딩의 높이
                int highest=Math.max(buildings.get(i-2),Math.max(buildings.get(i-1),Math.max(buildings.get(i+1),buildings.get(i+2))));
                if(highest<height){
                	goodView+=height-highest;
                }
            }
            System.out.println("#"+test_case+" "+goodView);
                
		}
	}
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함