c#/백준알고리즘

[c#] 11659번 구간 합 구하기 4

Heeyeon Choi 2023. 12. 20. 13:47
728x90

https://www.acmicpc.net/problem/11659

 

11659번: 구간 합 구하기 4

첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j

www.acmicpc.net

 

<맞은 답>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace baekjoon27433
{
    internal class FileName
    {
        static void Main(string[] args)
        {

            StringBuilder sb = new StringBuilder();
            //첫번째 입력값을 받아 배열로 저장 
            string[] firstLine = Console.ReadLine().Split(' ');
            int totalCount = int.Parse(firstLine[0]);
            int howMany = int.Parse(firstLine[1]);

            //두번째 입력값을 받아서 배열로 저장
            string[] SecondLine = Console.ReadLine().Split(' ');
            int[] ints = new int[totalCount];
            for (int i = 0; i < totalCount; i++)
            {
                ints[i] = int.Parse(SecondLine[i]);
            }

            //합 배열 만들기
            int[] sums = new int[totalCount];
            for(int i=0; i< totalCount; i++)
            {
                if (i == 0)
                {
                    sums[i] = ints[0];
                }
                else
                {
                    sums[i] = sums[i-1] + ints[i];
                }
            }

            for (int i = 0; i < howMany; i++)
            {
                string[] whatToWhat = Console.ReadLine().Split(' ');
                int a = int.Parse(whatToWhat[0]);
                int b = int.Parse(whatToWhat[1]);
                int sum = 0;
                if (a == 1)
                {
                    sum = sums[b - 1];
                }
                else
                {
                    sum = sums[b - 1] - sums[a - 2];
                }
                
                sb.Append(sum + "\n");
            }

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

        public static long Facto(long num)
        {
            if (num == 0) return 1;
            return num * Facto(num - 1);
        }
    }
}

 

 

<처음에 안 된 코드>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace baekjoon27433
{
    internal class FileName
    {
        static void Main(string[] args)
        {

            StringBuilder sb = new StringBuilder(); 
            string[] firstLine = Console.ReadLine().Split(' ');
            int totalCount = int.Parse(firstLine[0]);   
            int howMany = int.Parse(firstLine[1]);

            string[] SecondLine = Console.ReadLine().Split(' ');
            int[] ints = new int[totalCount];       
            for(int i = 0; i < totalCount; i++)
            {
                ints[i] = int.Parse(SecondLine[i]);  
            }

            for(int i = 0;i < howMany; i++)
            {
                string[] whatToWhat = Console.ReadLine().Split(' ');
                int a= int.Parse(whatToWhat[0]);    
                int b= int.Parse(whatToWhat[1]);
                int sum = 0;
                for(int j=a-1; j < b; j++)
                {
                    sum += ints[j];
                }
                sb.Append(sum+"\n"); 
            }

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

        public static long Facto(long num)
        {
            if(num == 0) return 1;
            return num*Facto(num - 1);
        }
    }
}

 

- 시간초과로 인해 틀렸음

- 이중 for문이 문제인 것 같음

- 이중 for문을 없애기 위해서는, 합 배열을 미리 만들어두고, 꺼내 써야함

 

728x90

'c# > 백준알고리즘' 카테고리의 다른 글

[c#] 274333번 팩토리얼 2  (0) 2023.12.11
[백준 15652번 c#] N과 M (4)  (0) 2022.10.24
[백준 18258번 c#] 큐 2  (0) 2022.10.06
[백준 11399번 c#] ATM  (2) 2022.10.06
[백준 15649번 c#] N과 M  (0) 2022.10.05