https://www.acmicpc.net/problem/21921
누적합들을 슬라이딩 윈도우 개념을 이용하여 구하고 비교하는 문제였다.
이중 for문을 사용하면 시간초과가 되어 최초의 누적 합을 구한 뒤, 이전값을 빼주고 다음값을 더해주도록 하였다.
using System;
namespace _21921
{
class Program
{
static void Main()
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
String[] str = sr.ReadLine().Split(' ');
String[] dayStr = sr.ReadLine().Split(' ');
int n = int.Parse(str[0]);
int x = int.Parse(str[1]);
int[] days = new int[n];
for(int i = 0; i < n; i++)
{
days[i] = int.Parse(dayStr[i]);
}
int max = 0; //최대방문자 수
int count = 1; //기간 수
int sum = 0;
for (int i = 0; i <= n - x; i++)
{
//첫 x일간의 누적 방문 수(누적 합)
if(i == 0)
{
for (int j = 0; j < x; j++)
{
sum += days[j];
}
}
else
{
//슬라이딩 윈도우
sum = sum - days[i - 1] + days[i + x - 1];
}
if (sum > max)
{
max = sum;
count = 1;
}
else if (sum == max) count++;
}
if (max == 0) sw.WriteLine("SAD");
else
{
sw.WriteLine("{0}\n{1}", max, count);
}
sr.Close();
sw.Flush();
sw.Close();
}
}
}
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[ BOJ/C# ] 2869 달팽이는 올라가고 싶다 (0) | 2023.09.01 |
---|---|
[ BOJ/C# ] 10989 수 정렬하기 3 (0) | 2023.08.30 |
[ BOJ/C# ] 1940 주몽 (0) | 2023.08.28 |
[ BOJ/C# ] 1159 농구 경기 (0) | 2023.08.27 |
[ BOJ/C# ] 1764 듣보잡 (0) | 2023.08.26 |