반응형

2011 정보올림피아드 초등부 1번문제이다.

문제풀이

 수열의 연속된 요소들의 합 중 가장 큰 값을 찾는 문제로, 수열을 t라 하면 sum(t[i:i+k])의 최댓값을 구하면 된다.

 1. sum(t[0:k])를 먼저 구한다.

 2. for 문을 k부터 n까지 가며, for 문의 변수가 i라 하면 1의 값에서 t[i]를 더하고 t[i-k]를 빼준다. 이렇게 하면 sum(t[i+k])가 된다.

 3. 2의 값과 1의 값을 비교해 가며 가장 큰 값을 가지고 있다가 for문이 끝나면 반환해준다.

 

시간 복잡도는 수열의 길이만큼의 for문 한번으로 끝나므로, 수열의 길이를 N이라 하면 O(N)이 된다.

주의해야 할 예제로는 n == k인 경우와, 정답이 음수인 경우 정도이다(처음에 ans를 0으로 초기화했다가 틀렸다).

Python Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
def solve(n,k,t):
    temp = sum(t[:k])
    ans = temp
    for i in range(k,n):
        temp += t[i]
        temp -= t[i-k]
        if temp > ans:
            ans = temp
    return ans if n != k else temp
if __name__ == "__main__":
    n, k = map(int,sys.stdin.readline().split())
    t = list(map(int,sys.stdin.readline().split()))
    print(solve(n,k,t))
cs

 

문제 링크

 

2559번: 수열

첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 위한 연속적인 날짜의 수이다. K는 1과 N 사이의 정수이다. 둘째 줄에는 매일 측정한 온도를 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -100 이상 100 이하이다. 

www.acmicpc.net

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 10610 30  (0) 2020.03.28
백준 2436 공약수  (0) 2020.03.24
백준 1058 친구  (0) 2020.03.19
백준 2469 사다리 타기  (0) 2020.03.19
백준 2468 안전 영역  (0) 2020.03.17

+ Recent posts