728x90
시간 제한 1초, 메모리 제한 128MB
# 문제
입력
- 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다.
- 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다.
- N은 2 이상 100,000 이하이다.
- 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다.
- K는 1과 N 사이의 정수이다.
- 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다.
- 이 수들은 모두 -100 이상 100 이하이다.
출력
- 첫째 줄에는 입력되는 온도와 수열에서 연속적인 K일의 온도의 합이 최대가 되는 값을 출력한다.
# 접근 방법
- 누적합과 투 포인터를 활용해주면 된다.
- 우선 입력받은 온도의 누적합을 cumulative_sum에 저장해준 후 0번 인덱스에 0을 삽입해준다.
- 이후, max_value를 -float('inf')로 설정해주고 left = 1, right = K 로 할당해준다.
- while문 조건을 right < N+1이 될 때까지 아래 로직을 수행해준다.
- now_value = cumulative_sum[right] - cumulative_sum[left-1]
- max_value = max(now_value, max_value)
- left +=1, right += 1
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
N, K = map(int, input().split())
cumulative_sum = [0] * (N+1)
arr = list(map(int, input().split()))
for i in range(1, N+1):
cumulative_sum[i] = cumulative_sum[i-1] + arr[i-1]
max_value = -float('inf')
left, right = 1, K
while right < N+1:
now_value = cumulative_sum[right] - cumulative_sum[left-1]
max_value = max(max_value, now_value)
left += 1
right += 1
print(max_value)
728x90
'ALGORITHM > 정렬, 탐색,구현' 카테고리의 다른 글
[백준 16508번] 파이썬 - 전공책 (0) | 2024.05.12 |
---|---|
[백준 1747번] 파이썬- 소수&팰린드롬 (0) | 2024.04.28 |
[코드트리] 파이썬 - 고대 문명 유적 탐사 (1) | 2024.04.20 |
[코드트리] 파이썬 - 나무 타이쿤 (0) | 2024.04.13 |
[코드트리] 파이썬 - 정육면체 한번 더 굴리기 (2) | 2024.04.12 |