모름

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

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

입력

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

출력

각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.

 

 

비교를 위한 코드

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
    public class Program {
        public static void Main()
        {
        ////입력 : 첫줄에 테스트케이스의 개수 T개가 주어진다(최대 1,000,000)
        int maxT = int.Parse(Console.ReadLine());
        int[] a = new int[maxT];
        int[] b = new int[maxT];

        ////두번쨰 입력줄 : 다음 T줄에 각각 정수 A,B가 주어진다. (1<A,B<1000)
        for(int i = 0; i < maxT; i++)
        {
            string[] ab = Console.ReadLine().Split(' ');
            a[i] = int.Parse(ab[0]);
            b[i] = int.Parse(ab[1]);
        }

        //출력 : 테스트 케이스마다 A+B를 한줄에 하나씩 순서대로 출력한다.
        for(int i = 0; i < maxT; i++)
        {
            Console.WriteLine(a[i] + b[i]);
        }

        Console.ReadKey();
    }
}

먼저 빠른 출력을 고려하지 않고, 그냥 저 식을 작성하면 위와 같은 코드가 나온다. 문제는 위 코드로 백준에 제출하면... 아래와 같은 결과가 나온다.

 

시간초과...

 

입력 자체가 워낙 방대한 수가 들어가기 때문에 제한시간내에 계산을 완료하지 못한것이다. 그럼 이걸 해결해야하는데, C#에선 StringReader와 Stringbuilder를 쓰면 된다고한다. 그럼 이게 무엇이냐..?

 

https://morm.tistory.com/27

 

C#에서 String과 Stringbuilder를 사용하는 경우

원본 링크 : https://hongjinhyeon.tistory.com/91 백준 단계별 문제를 푸는 와중에 언어 빠른 입출력 방법에 대한 설명이 등장했다(!) String으로 입력받고 출력만 했었는데 다른 방법이 또 있었나보다. 이렇게..

morm.tistory.com

간단하게 정리를 해봤다.

 

자 그럼 이제 해결해야할 문제는 입력받을때 StringReader로 받아야하는데 도통 어떻게 StringReader로 받으라는지 감이 잘 안온다. 그래도 여차저차 작성을 시도한다.

 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
    public class Program {
        public static void Main()
        {
        ////입력 : 첫줄에 테스트케이스의 개수 T개가 주어진다(최대 1,000,000)
        int maxT = int.Parse(Console.ReadLine());
        int[] a = new int[maxT];
        int[] b = new int[maxT];
        StringBuilder abNumbers = new StringBuilder();

        ////두번쨰 입력줄 : 다음 T줄에 각각 정수 A,B가 주어진다. (1<A,B<1000)
        for (int i = 0; i < maxT; i++)
        {
            string[] ab = Console.ReadLine().Split(' ');
            a[i] = int.Parse(ab[0]);
            b[i] = int.Parse(ab[1]);
            abNumbers.Append(a[i]+b[i]+"\n");
        }

        //출력 : 테스트 케이스마다 A+B를 한줄에 하나씩 순서대로 출력한다.
        Console.WriteLine(abNumbers.ToString());
        }
    }

출력방식을 StringBuilder로 바꾸었다. 제출했더니 일단 정답.

 

다만 아쉬운것은 입력부분에서 StringReader를 통해 받아야하는데, 도통 어떻게 저걸 써먹어서 입력받는지 감이 안온다. 추후에 업데이트예정.