728x90
문제
https://www.acmicpc.net/problem/1027
세준시에는 고층 빌딩이 많다. 세준시의 서민 김지민은 가장 많은 고층 빌딩이 보이는 고층 빌딩을 찾으려고 한다. 빌딩은 총 N개가 있는데, 빌딩은 선분으로 나타낸다. i번째 빌딩 (1부터 시작)은 (i,0)부터 (i,높이)의 선분으로 나타낼 수 있다. 고층 빌딩 A에서 다른 고층 빌딩 B가 볼 수 있는 빌딩이 되려면, 두 지붕을 잇는 선분이 A와 B를 제외한 다른 고층 빌딩을 지나거나 접하지 않아야 한다. 가장 많은 고층 빌딩이 보이는 빌딩을 구하고, 거기서 보이는 빌딩의 수를 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 빌딩의 수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에 1번 빌딩부터 그 높이가 주어진다. 높이는 1,000,000,000보다 작거나 같은 자연수이다.
[ 출력 ]
첫째 줄에 문제의 정답을 출력한다.
풀이
- 왼쪽과 오른쪽을 나누고, 빌딩 지붕끼리 이은 기울기로 판단
// 백준 - 고층 건물(1027)
const solution = ( input ) => {
const N = parseInt(input.shift());
const building = input.shift().split(' ').map((o) => parseInt(o));
let answer = 0;
for(let i = 0; i < N; i++) {
let cnt = 0;
// 왼쪽
let min = Infinity;
for(let j = i - 1; j >= 0; j--){
let temp = (building[j] - building[i]) / (j - i);
if(min > temp) {
cnt++;
min = temp;
}
}
// 오른쪽
let max = -Infinity;
for(let j = i + 1; j < N; j++) {
let temp = (building[j] - building[i]) / (j - i);
if(max < temp) {
cnt++;
max = temp;
}
}
if(answer < cnt) answer = cnt;
}
console.log(answer);
}
/*
테스트용: __dirname + '/input.txt'
제출용: '/dev/stdin'
*/
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
solution(input);
728x90
'Programming > JavaScript' 카테고리의 다른 글
[백준/JavaScript] RGB거리 2(17404) (0) | 2024.07.19 |
---|---|
[백준/JavaScript] X와 K(1322) (0) | 2024.07.19 |
[백준/JavaScript] 토마토(7569) (0) | 2024.07.13 |
[백준/JavaScript] 스카이라인 쉬운거(1863) (0) | 2024.07.05 |
[백준/JavaScript] 전깃줄(2565) (0) | 2024.07.05 |