Algorithm/BOJ

[BOJ] 11659 구간 합 구하기 4 C# 풀이

Bueong_E 2023. 1. 18. 15:02
반응형
SMALL

무식하게 for문을 이중으로 돌려서 풀지 않고 공식을 이용하여 편하게 풀수 있다는걸 알았다.

풀어서 보면 크게 헷갈리지 않으나 생각해내는건 쉽지않아 비교적 단순한 공식이기에 외우는 것이 시간적으로 훨씬 효울적일듯하다.

using System;
using System.Collections.Generic;
using System.Linq;

namespace _11720
{

    class Program
    {
        static void Main()
        {
            int[] arr = { 0, 5, 4, 3, 2, 1 };
            int[] sumarr = new int[5 + 1];    // 배열의 요소는 default 0 값

           
            // 합배열 만들기     //구간합을 구할땐 합배열을 만들어 해결.
            // sumarr[i] = sumarr[i-1] + arr[i]       // 배열 합 만드는 공식

            Console.WriteLine(sumarr[0]);
            for (int i = 1; i < 6; i++)
            {
                sumarr[i] = sumarr[i - 1] + arr[i];  //  i 가 1일때 sumarr[1]의 값은 sumarr[1 - 1] = sumarr[0] = 0 번째 배열 + sumarr[1] = 5 결론 : 0 + 5 = 5
                                                    //  i 가 2일때 sumarr[2]의 값은 sumarr[2 - 1] = sumarr[1] = 5 번째 배열 + sumarr[2] = 5 결론 : 5 + 4 = 9 ...
                                                    
            }
           
            for (int i = 0; i < 6; i++)             //  arr 정수배열의 모든요소 출력
            {
                Console.Write("{0,2} ", arr[i]);
            }
            Console.WriteLine();
            for (int i = 0; i < 6; i++)             // sumarr 정수배열의 모든요소 출력
            {
                Console.Write("{0,2} ", sumarr[i]);
            }

            // 구간합 공식                           // 외우자
            // sumarr[i] - sumarr[j-1]             ==  i인덱스부터 j인덱스 요소들의 모든 합을 구하는 공식
            //i번째 수부터 j번째 수까지 합을 출력한다.
            Console.WriteLine();

            {
                int i = 2;
                int j = 3;

                //  (sumarr[3] = 12) - (sumarr[0] = 0) = 12
                Console.WriteLine(sumarr[j] - sumarr[i - 1]);
            }

        }
    }
}

결과창

반응형
LIST