[11441] 합 구하기

RudinP·2023년 6월 19일
0

BaekJoon

목록 보기
70/77

생각

첫째줄 : 실제 연산할 수의 개수
둘째줄 : 실제 연산 대상
셋째줄 : 구간 수
넷째줄~ : 구간 (즉, 배열의 인덱스)

1초 안에 해야하는데 주어지는 수는 10만개라서 생각을 해야한다.
이런 경우에는 누적합을 구해준 뒤, 구간에 해당하지 않는 수들을 빼주면 된다.

코드

using System.Text;

namespace SongE
{
    class Program
    {
        static string Hap(int[] nujeok, int[] section)
        {
            if (section[0] == 0)
                return nujeok[section[1]].ToString();
            else 
                return (nujeok[section[1]] - nujeok[section[0] - 1]).ToString();
        }

        private static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            Console.ReadLine();
            int[] nums = Array.ConvertAll(Console.ReadLine().Split(), s => int.Parse(s));

            int m = int.Parse(Console.ReadLine());

            int[] nujeok = new int[nums.Length];
            int sum = 0;
            for(int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
                nujeok[i] = sum;
            }

            for(int i = 0; i < m; i++)
            {
                int[] section = Array.ConvertAll(Console.ReadLine().Split(), s => int.Parse(s) - 1);
                sb.AppendLine(Hap(nujeok, section));
            }

            Console.Write(sb.ToString());
        }
    }
}

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글