본문 바로가기

알고리즘

투포인터 슬라이더 문제 풀이(1)

728x90

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

 

21921번: 블로그

첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다

www.acmicpc.net

[정답코드]

let fs = require("fs");
let input = fs.readFileSync("input.txt").toString().split("\n");

let [n,x]= input[0].split(" ").map(Number)
let arr=[0,...input[1].split(" ").map(Number)]
//n=7
//x=5
//arr=[0,1,1,1,1,1,5,1]

let sum = 0;
for(let i=1;i<=n;i++){
  //1부터 x번째 날의 방문자 수의 합
  if(i<=x) sum=sum+arr[i]
}
let maxSum=sum; //가장 큰 합
let count=1;//기간의 개수

console.log(sum)//5

// 슬라이딩 윈도우 시작
let left = 1;
let right = x;

while(right+1<=n){//윈도우를 한 칸 오르쪽으로 이동하기
  left++
  right++
  sum=sum+arr[right]-arr[left-1]
  if(sum===maxSum) count++
  else if(maxSum<sum){
    maxSum=sum
    count=1
  }
}

if(maxSum===0) console.log("SAD")
else{
  console.log(maxSum)
  console.log(count)
}
728x90

'알고리즘' 카테고리의 다른 글

DFS 문제풀이  (1) 2023.06.08
DFS(깊이 우선 탐색)  (0) 2023.06.06
투 포인터 알고리즘  (0) 2023.05.07
이진탐색 문제 풀이1  (0) 2023.05.01
3. 파라메트릭 서치 이해하기  (0) 2023.05.01