hsskey / algorithm-practice

🧑‍💻 Solving algorithms to level up
0 stars 0 forks source link

블로그 #3

Open hsskey opened 2 months ago

hsskey commented 2 months ago

블로그

X일 동안 가장 많이 들어온 방문자 수와 기간들 출력

📝 제약조건

💡 예시

문제 해결 과정

Step 1: 문제 이해하기

Step 2: 접근 방법

Step 3: 코드 설계 (수도코드)

n, x, arr 입력받기

sum = 첫 X일 동안의 방문자 수 합
maxSum = sum
count = 1

left = 1
right = x

loop (right ≤ n):
    sum = sum + arr[right] - arr[left - 1]

    if sum == maxSum:
        count += 1
    if sum > maxSum:
        maxSum = sum
        count = 1

    left += 1
    right += 1

if maxSum == 0:
    "SAD" 출력
else:
    maxSum과 count 출력

Step 4: 코드 구현

 const fs = require('fs')
 const filePath = process.platform === 'linux' ? '/dev/stdin' : `${__dirname}/input.txt`
 const input = fs.readFileSync(filePath).toString().split('\n')

 const [n, x] = input[0].split(' ').map((item) => Number(item))
 const arr = [0, ...input[1].split(' ').map((item) => Number(item))]

 let sum = 0
 for (let i = 1; i <=n; i++) {
    if(i <= x) sum += arr[i]
 }

 let maxSum = sum // 가장 큰 합(첫번째 윈도우 구간에 대한 합계 설정)
 let count = 1 // 기간의 개수

 let left = 1
 let right = x

 while(true) { // 윈도우를 한 칸 오른쪽으로 이동하기
    left += 1
    right += 1

    if(right > n) break

    sum = sum + arr[right] - arr[left - 1] // 합을 계산하여 정답 갱신

    if(maxSum === sum) count += 1
    else if (maxSum < sum) { // 더 큰 합을 찾은 경우
        maxSum = sum
        count = 1
    }
 }
if(maxSum === 0) console.log('SAD')
else {
    console.log(maxSum)
    console.log(count)
}