[백준] 2559 - 수열
1. 문제
2. 개요
매일 오전 9시에 측정한 온도의 수열이 주어졌을 때,
연속적인 K일간의 온도의 합이 가장 큰 경우의 온도의 합을 구하는 문제.
3. 풀이 및 코드
3-1. 풀이
먼저 주어진 수열에 대한 누적합 배열 sums를 만든다.
어떤 수 i일 까지의 연속적인 K일간의 온도의 합은 sums[i] - sums[i - K]로 나타낼 수 있다.
따라서 가능한 i에 대하여 해당 값을 answer와 비교하며 더 큰 값을 계속 갱신한 뒤, 답을 출력한다.
3-2. Python
import sys
N, K = map(int, sys.stdin.readline().split())
nums = list(map(int, sys.stdin.readline().split()))
sums = [0]
for i in range(N):
sums.append(nums[i] + sums[-1])
answer = -100000000
for i in range(K, N+1):
answer = max(answer, sums[i] - sums[i - K])
print(answer)
3-3. C#
namespace boj_2559
{
internal class Program
{
static void Main(string[] args)
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
string[] input = sr.ReadLine().Split();
int N = int.Parse(input[0]), K = int.Parse(input[1]);
int[] nums = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
int[] sums = new int[N + 1];
for (int i = 0; i < N; i++)
sums[i + 1] = sums[i] + nums[i];
int answer = -100000001;
for (int i = K; i < N + 1; i++)
answer = (int)MathF.Max(answer, sums[i] - sums[i - K]);
sw.WriteLine(answer);
sw.Close();
}
}
}
Comments