Algorithm/백준

[백준] 1027 고층 건물 JS

SSONGMI 2024. 2. 15. 14:50
반응형

문제 출처:https://www.acmicpc.net/problem/1027https://www.acmicpc.net/problem/2234

 

 

 

1. 입력

: 첫째 줄에 빌딩의 수 N이 주어진다.

: N은 50보다 작거나 같은 자연수이다.

: 둘째 줄에 1번 빌딩부터 그 높이가 주어진다.

: 높이는 1,000,000,000보다 작거나 같은 자연수이다.

 

 

2. 결과

: 첫째 줄에 문제의 정답을 출력한다.

 

 

3. 풀이

:각 건물에 대해 왼쪽과 오른쪽 방향으로 건물들을 확인한다.

: 각 방향에 대해 현재 건물과 다른 건물 사이의 기울기를 계산하고, 이전에 계산된 기울기와 비교하여 서로 볼 수 있는지 판단한다.

: 최대로 볼 수 있는 건물의 수를 max 변수에 저장한다.

 

let fs = require("fs");
let input = fs.readFileSync("./input.txt").toString().trim().split("\n");
const N = Number(input.shift().trim());
const buildings = input.shift().trim().split(' ').map(num => Number(num));
let max = Number.MIN_SAFE_INTEGER;

for(let i = 0; i < N; i++) {
  // left
  let cnt = 0;
  let gradient = Number.MAX_SAFE_INTEGER;
  for(let l = i-1; l >= 0; l--) {
    if(gradient > (buildings[i] - buildings[l]) / (i - l)) {
      gradient = (buildings[i] - buildings[l]) / (i - l);
      cnt++;
    }
  }
  gradient = Number.MIN_SAFE_INTEGER;
  // right
  for(let r = i+1; r < N; r++) {
    if(gradient < (buildings[i] - buildings[r]) / (i - r)) {
      gradient = (buildings[i] - buildings[r]) / (i - r);
      cnt++;
    }
  }
  max = Math.max(cnt, max);
}

console.log(max);
반응형