Coding Test/Practice

백준 21921번 블로그 JavaScript 풀이 [투포인터]

yunicornlab 2024. 7. 22. 12:40
반응형

백준 21921번 블로그 문제를 자바스크립트로 투포인터 알고리즘을 이용해서 풀어보았다.

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

 

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

// 총 일수 N, 계산하고자 하는 기간 X일
let [n, x] = input[0].split(' ').map(Number);
let visitors = input[1].split(' ').map(Number);

// 최대 방문자 수
let maxVisit = 0;
// 최대 방문자 수를 달성한 기간 수
let count = 0;

// 투포인터를 위한 start, end, 현재 방문자수의 합 설정
let start = 0;
let end = start + x - 1;
let sumVisit = 0;
for (let i=start; i<=end; i++) {
  sumVisit += visitors[i] 
}

while (end < n) {
  // 현재 방문자수 < 최대 방문자수 : pass
  // 현재 방문자수 = 최대 방문자수 : count++
  // 현재 방문자수 > 최대 방문자수 : 최대방문자수 갱신, count = 1
  if (maxVisit == sumVisit) count += 1;
  else if (maxVisit < sumVisit) {
    maxVisit = sumVisit;
    count = 1
  }

  sumVisit -= visitors[start];
  start++;
  end++;
  sumVisit += visitors[end];
}

// 결과 출력
if (maxVisit == 0) console.log("SAD")
else {
  console.log(maxVisit)
  console.log(count)
}
반응형