https://www.acmicpc.net/problem/1027
1027번: 고층 건물
세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)
www.acmicpc.net
문제
코드
import java.io.*;
import java.util.*;
public class Main {
private static final BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(bf.readLine());
StringTokenizer st = new StringTokenizer(bf.readLine());
int[] tower = new int[n];
for(int i = 0 ; i < n ; i++) {
tower[i] = Integer.parseInt(st.nextToken());
}
int ans = 0;
for(int i = 0 ; i < n ; i++) {
int cnt = 0;
// 왼쪽 그래프 탐색 : max_l 보다 기울기가 작거나 같다면 건물을 지나치거나 겹칩
double max_l = 1_000_000_000;
for(int j = i-1 ; j >= 0 ; j--) {
double l = (tower[i]-tower[j]) / ((double)i - (double)j);
if(l < max_l) {
cnt ++;
max_l = l;
}
}
// 오른쪽 그래프 탐색 : min_l 보다 기울기가 크거나 같다면 건물을 지나치거나 겹칩
double min_l = -1_000_000_000;
for(int j = i+1 ; j < n ; j++) {
double l = (tower[i]-tower[j]) / ((double)i - (double)j);
if(l > min_l) {
cnt ++;
min_l = l;
}
}
ans = Math.max(ans, cnt);
}
bw.write(Integer.toString(ans));
bf.close();
bw.flush();
bw.close();
}
}
'코딩테스트' 카테고리의 다른 글
[백준] 1937번 '욕심쟁이 판다' - Java (1) | 2023.07.28 |
---|---|
[백준] 1756번 '피자 굽기' - Java (0) | 2023.07.27 |
[백준] 1484번 '다이어트' - Java (0) | 2023.07.25 |
[백준] 2240번 '자두나무' - Java (1) | 2023.07.24 |
[백준] 1309번 '동물원' - Java (0) | 2023.07.23 |