๐Ÿ“„ ๋‚œ์ด๋„ : โญโญ
๐Ÿ“„ ์–ธ์–ด : C#

๐Ÿ“‚๋ฌธ์ œ ๋งํฌ


๐Ÿ”ถ ํ’€์ด

โŒ 1๏ผŽLINQ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ฑ„์ ์—์„œ ํƒ€์ž„์˜ค๋ฒ„๋œ ์ฝ”๋“œ. LINQ๋ฅผ ์จ๋ดค๋Š”๋ฐ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๊ฑด ๋น„ํšจ์œจ์ ์ด๋‹ค.
  • ๋™์ผํ•œ ๊ตฌ์กฐ๋กœ for๋ฃจํ”„๋กœ๋„ ํ’€์–ด๋ดค๋Š”๋ฐ, ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๋˜‘๊ฐ™์ด ๊ฑธ๋ฆฐ๋‹ค.
using System;
using System.Linq;

namespace atCoder.Contest
{
    class Q010_Score_Sum_Queries
    {
        struct Student
        {
            public int I, C, P;
        }

        static void Main()
        {
            int N = Convert.ToInt32(Console.ReadLine());
            Student[] students = new Student[N];

            for (int i = 0; i < N; i++)
            {
                int[] array = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
                students[i].C = array[0];
                students[i].P = array[1];
                students[i].I = i + 1;
            }

            int Q = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < Q; i++)
            {
                int[] queryNum = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
                int L = (
                      from student in students
                      where (student.I >= queryNum[0] && student.I <= queryNum[1]) && student.C == 1
                      select student.P
                       ).Sum();

                int R = (
                      from student in students
                      where (student.I >= queryNum[0] && student.I <= queryNum[1]) && student.C == 2
                      select student.P
                       ).Sum();

                Console.WriteLine($"{L} {R}");
            }
        }
    }
}

โญ• 2๏ผŽ๋ฏธ๋ฆฌ ํ•ฉ์„ ๊ตฌํ•ด๋‘๋Š” ๋ฐฉ๋ฒ•

  • Q๋ฅผ ๋ฐ›์„ ๋•Œ ๋งค๋ฒˆ ๋ฃจํ”„๋ฅผ ๋Œ์ง€ ์•Š๋„๋ก ๋ฏธ๋ฆฌ ์ž…๋ ฅ๋‹จ๊ณ„์—์„œ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•ด๋‘”๋‹ค.
  • Q๋ฅผ ๋ฐ›์œผ๋ฉด (์ตœ๋Œ€๊ตฌ๊ฐ„์˜ ํ•ฉ - ์ตœ์†Œ๊ตฌ๊ฐ„์˜ ํ•ฉ) ์œผ๋กœ ํ•ฉ๊ณ„๋ฅผ ๋ฃจํ”„์—†์ด ๊ตฌํ•œ๋‹ค.
using System;
using System.Linq;

namespace atCoder.Contest
{
    class Q010_Score_Sum_Queries
    {
        static void Main()
        {
            int N = Convert.ToInt32(Console.ReadLine());

            int[] Lsum = new int[N+1];
            int[] Rsum = new int[N+1];
            for (int i = 1; i < N+1; i++)
            {
                int[] array = Console.ReadLine().Split().Select(Int32.Parse).ToArray();

                Lsum[i] = Lsum[i - 1];
                Rsum[i] = Rsum[i - 1];

                if (array[0] == 1) Lsum[i] += array[1];
                else if (array[0] == 2) Rsum[i] += array[1];
            }

            int Q = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < Q; i++)
            {
                int[] queryNum = Console.ReadLine().Split().Select(Int32.Parse).ToArray();
                int L = Lsum[queryNum[1]] - Lsum[queryNum[0]-1];
                int R = Rsum[queryNum[1]] - Rsum[queryNum[0]-1];

                Console.WriteLine($"{L} {R}");
            }
        }
    }
}

(post-code: 2022-05-05-010)

TOP