https://www.acmicpc.net/problem/15552
입력
첫 줄에 테스트케이스의 개수 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를 쓰면 된다고한다. 그럼 이게 무엇이냐..?
간단하게 정리를 해봤다.
자 그럼 이제 해결해야할 문제는 입력받을때 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를 통해 받아야하는데, 도통 어떻게 저걸 써먹어서 입력받는지 감이 안온다. 추후에 업데이트예정.