알고리즘 풀이

[C#] 백준 1912번 문제풀이

bimtaeur30 2026. 4. 2. 09:31

문제번호: 1912

문제명: 연속

문제링크: https://www.acmicpc.net/problem/1912

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다

 

오늘은 최대 연속 구간합을 구하는 문제를 풀었습니다. 해당 문제의 시간제한부터 살펴보겠습니다.
1초 (추가 시간 없음)이네요. 완전탐색(O(n^3))으로 풀기엔 시간이 턱없이 부족하다고 판단했습니다. 그래서 동적할당(dp)로 접근을 시도했습니다. thisSum과 maxSum 변수를 이용해 thisSum = Math.Max(thisSum + arr[k], 0); 으로 자신과 arr[k]을 더한값을 0과 비교하여 값을 할당하고, maxSum = Math.Max(maxSum, thisSum); 으로 최댓값을 할당했습니다. 마지막으로 maxSum이 0일경우 모든 수가 음수이라는 뜻이기 때문에 가장 작은 수를 정답으로 출력해주었습니다.
다음은 정답코드입니다.

static void Main()
{
    using StreamReader sr = new StreamReader(Console.OpenStandardInput());
    using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    int n = int.Parse(sr.ReadLine());
    int[] nums = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
    sw.WriteLine(MaxSubArray(nums, n));
}

static int MaxSubArray(int[] arr, int n)
{
    if (n == 1)
        return arr[0];

    int maxSum, thisSum;
    maxSum = 0;
    thisSum = 0;

    for (int k = 0; k < n; k++)
    {
        thisSum = Math.Max(thisSum + arr[k], 0);
        maxSum = Math.Max(maxSum, thisSum);
    }

    if (maxSum == 0)
        return arr.Max();
    return maxSum;
}

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 2096번 문제풀이  (0) 2026.04.12
[C#] 백준 9657번 문제풀이  (0) 2026.04.04
[C#] 백준 14911번 문제풀이  (0) 2026.04.01
[C#] 백준 18870번 문제풀이  (0) 2026.03.25
[C#] 백준 1002번 문제풀이  (0) 2026.03.24