코딩테스트/백준

[java] 백준 1027 : 고층 건물

플래시🦥 2023. 9. 7.
반응형

https://www.acmicpc.net/problem/1027

 

1027번: 고층 건물

세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)

www.acmicpc.net


빌딩 높이 배열을 입력받아 특정 빌딩에서 볼 수 있는 빌딩의 개수 중 최댓값을 출력하는 문제이다. 

 

  • for문으로 모든 빌딩을 탐색한다.
  • 기준 빌딩의 좌우에 존재하는 빌딩들의 기울기를 비교하여 볼 수 있는 빌딩의 개수를 구한다. 
  • 기준 빌딩의 왼쪽에 존재하는 빌딩은 이전 기울기보다 무조건 작아야 볼 수있고
  • 해당 빌딩의 오른쪽에 존재하는 빌딩은 이전 기울기보다 무조건 커야 볼 수 있다. 
  • 즉, 왼쪽이든 오른쪽이든 자기보다 기준 빌딩에 가까운 빌딩의 높이보다는 높아야 기준 빌딩에서 보인다. 
  • 기울기를 구하는 공식은 (Y의 증가량)/(X의 증가량)이다. 

 

 

전체코드

import java.io.*;
import java.util.*;

public class Main {    

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int num = Integer.parseInt(sc.nextLine());
        long[] arr = new long[num];
        int max =0,ans=0;
        for(int i=0; i< num ; i++) {
        	arr[i]= sc.nextInt();
        }
        
        for(int i=0; i<num;i++) {
        	int tmp =0 ;
        	double preSlope = 99999999999d;
        	for(int j=i-1;j>=0;j--) {
        		double tmpSlope=(double)(arr[j]-arr[i])/(double)(j-i);
        		if(preSlope>tmpSlope) {
        			tmp++;
        			preSlope = tmpSlope;
        		}
        	}
        	
        	preSlope = -99999999999d;
        	for(int j=i+1;j<num;j++) {
        		double tmpSlope=(double)(arr[j]-arr[i])/(double)(j-i);			
        		if(preSlope<tmpSlope) {
        			tmp++;
        			preSlope = tmpSlope;
        		}
        	}
        	
        	ans = Math.max(ans, tmp);
        }
       
        System.out.println(ans);
        
    }    
    
}
728x90
반응형

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

[Java] 백준 14503 : 로봇 청소기  (2) 2023.03.31
[Java] 백준 2293 : 동전 1  (0) 2023.03.07
[Java] 백준 15686 : 치킨 배달  (0) 2023.03.06
[JAVA] 백준 1759 : 암호 만들기  (1) 2023.02.28
[JAVA] 백준 9251 : LCS  (0) 2023.02.27

댓글