투포인터 | BOJ 백준 21921번 블로그 | Python

Table of Contents


BOJ 백준 21921번 블로그 | Python

📌 백준 21921번 문제 바로가기

📌 백준 21921번 문제 제한

🔎 문제 설명

🩶 실버 3

- 난이도 ★★☆☆
- 투포인터

처음엔 for문을 돌리면서 슬라이싱으로 풀었는데 시간초과 가 났다.
그래서 그 후엔 불필요하게 반복되는 시간을 줄이고자 투포인터 방식으로 접근하였다.

이건 시작 포인트와 끝 포인트 사이 원소 개수가 정해져 있는 생각보다 쉬운 문제다.
시작 포인트 기준으로 새로 포함되는 원소를 더하고, 포함되지 않는 원소를 빼주면서 슬라이싱을 진행하는 식으로 코드를 작성하였다.



💻 내 코드

import sys
input = sys.stdin.readline

N, X = map(int,input().split())
blog = list(map(int, input().split()))

inter_sum = 0
max_blog = -1
cnt = 0

if max(blog) == 0:
    max_blog = 0

else:
    inter_sum = sum(blog[:X])
    max_blog = inter_sum
    cnt = 1
    for start in range(X, N):
        inter_sum -= blog[start-X]
        inter_sum += blog[start]

        if inter_sum > max_blog:
            max_blog = inter_sum
            cnt = 1
        elif inter_sum == max_blog:
            cnt += 1
    
if max_blog == 0:
    print('SAD')
else:
    print(max_blog)
    print(cnt)




 


💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).