[백준 3단계] C# 15552 빠른 A+B (StringBuilder, StringReader)
문제
본격적으로 for문 문제를 풀기 전에 주의해야 할 점이 있다. 입출력 방식이 느리면 여러 줄을 입력받거나 출력할 때 시간초과가 날 수 있다는 점이다.
C#
StreamReader로 읽고, StringBuilder로 출력을 모아 놓았다가 그 String을 Console.WriteLine하는 방법이 있습니다.
입력
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
출력
각 테스트케이스마다 A+B를 한 줄에 하나씩 순서대로 출력한다.
예제 입력 1
5
1 1
12 34
5 500
40 60
1000 1000
예제 출력 1
2
46
505
100
2000
StringBuilder만 사용한 풀이
StringBuilder를 사용하기 위해 using System.Text가 필요하며 StringBuilder.Append() 함수를 사용했다.
using System;
using System.Text;
namespace Baekjoon
{
class Program
{
static void Main(string[] args)
{
int count = int.Parse(Console.ReadLine());
StringBuilder answer = new StringBuilder();
string[] nums;
for (int i = 0; i < count; i++)
{
nums = Console.ReadLine().Split(' ');
answer.Append((int.Parse(nums[0]) + int.Parse(nums[1])).ToString() + "\n");
}
Console.WriteLine(answer);
}
}
}
이렇게 했을 때 1204ms로 1.2초 정도 걸렸다.
문제의 제한 시간은 1초인데 토론글을 보니 이 문제에서 C#은 보너스 시간이 있다는 것 같다.
글 읽기 - 추가 설명 및 다른 언어 빠른 입출력 방법
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
StringBuilder, StringReader를 모두 사용한 버전
using System.IO 필요. StringReader().ReadLine().Split(' ')을 활용했다.
ReadLine() | 현재 문자열에서 한 줄의 문자를 읽고 데이터를 문자열로 반환합니다. |
StringReader 공식 문서
StringReader 클래스 (System.IO)
문자열에서 읽어오는 TextReader를 구현합니다.
learn.microsoft.com
using System;
using System.Text;
using System.IO;
namespace Baekjoon
{
class Program
{
static void Main(string[] args)
{
int count = int.Parse(Console.ReadLine());
StringBuilder answer = new StringBuilder();
string[] nums;
StringReader reader;
for (int i = 0; i < count; i++)
{
reader = new StringReader(Console.ReadLine());
nums = reader.ReadLine().Split(' ');
answer.AppendLine( (int.Parse(nums[0]) + int.Parse(nums[1])).ToString() );
}
Console.WriteLine(answer);
}
}
}
근데 왜 StringReader 활용한 게 더 느리냐?
StringReader 선언 부분과 reader 에 넣어주는 부분을 생략하면 조금 더 빨라진다.
using System;
using System.Text;
using System.IO;
namespace Baekjoon
{
class Program
{
static void Main(string[] args)
{
int count = int.Parse(Console.ReadLine());
StringBuilder answer = new StringBuilder();
string[] nums;
for (int i = 0; i < count; i++)
{
nums = new StringReader(Console.ReadLine()).ReadLine().Split(' ');
answer.AppendLine( (int.Parse(nums[0]) + int.Parse(nums[1])).ToString() );
}
Console.WriteLine(answer);
}
}
}
자매품)
StringWrite.Write()를 사용할 수 있음
Write(StringBuilder) | 현재 문자열에 문자열 작성기의 문자열 표현을 씁니다. |
StringWriter 공식 문서
StringWriter 클래스 (System.IO)
문자열에 정보를 작성하는 TextWriter 를 구현합니다. 정보는 기본 StringBuilder에 저장됩니다.
learn.microsoft.com