백준 21921 < 블로그 > JavaScript

2022. 12. 29.·☕️ 커리어 & 인터뷰 준비/코딩 테스트

📍문제 링크

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

 

21921번: 블로그

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

www.acmicpc.net

 

📍알고리즘 분류

- 누적 합

- 슬라이딩 윈도우

 

📍문제 풀이

- 주어진 수열에서 연속된 N개의 최댓값과 가능한 갯수를 출력하라

 

- Sliding Window 알고리즘을 사용하면 O(N^2) 대신 O(N)으로 해결이 가능

 

📍Sliding Window

- 배열이나 문자열같은 일련의 데이터셋에서 특정 조건을 만족시키는 (예 - 일정 구간의 최댓값) 하위 집합을 찾을 때 유용

- window : 조건을 만족하는지 아닌지를 판별하는 집합 단위

이 window가 sliding하면서 타겟 집합을 찾는다

 

📍코드 (JavaScript)

const [in1, in2] = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const [N, X] = in1.split(" ").map(Number);
const arr = in2.split(" ").map(Number);

const maxSubarraySum = (arr, num) => {
  if (arr.reduce((acc, cur) => acc + cur, 0) === 0) return "SAD";
  const obj = {};
  let maxSum = 0;
  let tempSum = 0;
  let subNum = 1;
  for (let i = 0; i < num; i++) {
    maxSum += arr[i]; // 우선 첫 번째 합을 maxSum에 저장
  }
  tempSum = maxSum;
  for (let i = num; i < arr.length; i++) {
    // arr[0] 빼고 arr[num] 더하면 새로운 window.
    // 이것을 반복
    tempSum = tempSum - arr[i - num] + arr[i];
    if (maxSum === tempSum) subNum++;
    else if (maxSum < tempSum) {
      maxSum = tempSum;
      subNum = 1;
    }
  }
  return maxSum + "\n" + subNum;
};

console.log(maxSubarraySum(arr, X));

 

'☕️ 커리어 & 인터뷰 준비/코딩 테스트' 카테고리의 다른 글
  • 백준 1475 < 방 번호 > Python
  • 백준 2302 < 극장 좌석 > JavaScript
  • 백준 22945 < 팀 빌딩 > Python
  • 백준 20364 < 부동산 다툼 > JavaScript
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
백준 21921 < 블로그 > JavaScript
상단으로

티스토리툴바