[BOJ][C#] 21921 블로그

LimJaeJun·2023년 12월 23일
0

PS/BOJ

목록 보기
74/108

📕 문제

📌 링크

📗 접근 방식

  1. 입력 받기:
    정수 배열 inputs를 생성하여 첫 번째 원소는 행(R), 두 번째 원소는 X의 값을 받습니다.
    정수 배열 arr를 생성하여 판매량을 저장한다.

  2. 초기화:
    arr 배열에서 처음 X일 동안의 판매량 합계를 계산하고, 이 값을 answer와 count에 초기화한다.

  3. 판매량 계산:
    배열을 순회하면서 현재 일부터 X일까지의 합계를 구하고, 이전까지의 최대 판매량과 비교한다.
    새로운 판매량이 이전까지의 최대 판매량보다 크다면, answer와 count를 업데이트한다.
    새로운 판매량이 이전까지의 최대 판매량과 같다면, count를 1 증가시킨다.

  4. 결과 출력:
    최종적으로 answer가 0이면 "SAD"를 출력하고, 그렇지 않으면 answer와 count를 출력한다.

📘 코드

using System.Text;

namespace BOJ
{
    class No_21921
    {        
        static void Main()
        {
            StringBuilder sb = new StringBuilder();
            int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            int N = inputs[0];
            int X = inputs[1];

            var arr = new int[250_001];
            
            string[] s = Console.ReadLine().Split();
            for (int i = 0; i < s.Length; i++)
            {
                arr[i] = int.Parse(s[i]);
            }
            
            int sum = 0;
            for (int i = 0; i < X; i++)
            {
                sum += arr[i];
            }
            
            int answer = sum;
            int count = 1;
            for (int i = X; i < N; i++)
            {
                sum += arr[i] - arr[i - X];

                if (answer == sum)
                    count++;
                else if (answer < sum)
                {
                    answer = sum;
                    count = 1;
                }
            }

            if (answer == 0)
            {
                sb.AppendLine("SAD");
            }
            else
            {
                sb.AppendLine($"{answer}");
                sb.AppendLine($"{count}");    
            }
            
            Console.Write(sb);
        }
    }   
}

📙 오답노트

📒 알고리즘 분류

  • 누적 합
  • 슬라이딩 윈도우
profile
Dreams Come True

0개의 댓글

관련 채용 정보