본문 바로가기
백준/단계별

백준 15552 C#) 빠른 A+B

by alpacadabra 2022. 4. 18.

이 문제에서 익혀야 하는 것은 단순히 A+B를 반복하는 방법이 아니라 최대한 입출력을 빠르게 하는 방법이다. 별로 어렵지 않기 때문에 추후 입출력이 많은 문제가 나올 때마다 써먹으면 큰 도움이 될 것이다.

 

StreamReader sr = new (new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput()));

int n = int.Parse(sr.ReadLine());
string[] s;

for (; n > 0; n--)
{
    s = sr.ReadLine().Split();
    sw.WriteLine(int.Parse(s[0]) + int.Parse(s[1]));
}

sr.Close();
sw.Close();

 

간단히 설명하자면 StreamReader와 StreamWriter의 역할은 성능 향상을 위해 표준 입출력을 버퍼링하는 것이다.

실제로 이것을 사용하면 실행 시간(특히 출력)이 굉장히 빨라지므로 출력이 많은 문제에서는 반드시 사용해야 한다.

입력은...가끔씩 더 느려질 때도 있어서 나는 잘 안쓰는 편이다.

참고로 Close 메소드는 Flush를 포함하고 있어 굳이 따로 Flush를 해줄 필요가 없다.

 

정 어색하다면 StringBuilder를 사용해도 좋다. 똑같이 버퍼로 사용할 수 있다.

다만 StringBuilder의 본래 역할은 문자열의 수정이 잦은 상황에서 가비지의 생성을 막는 것이다.

StreamWriter와는 다르게 버퍼의 수정이 가능하면서 다양한 기능들을 제공하므로 더 무거울 수밖에 없다.

 

어떤 방법을 사용하든 무조건 이득은 아니기 때문에 주의해서 사용해야 한다.

StringBuilder 클래스 및 메소드에 대한 설명은 마이크로소프트 문서를 참고하자.

 

 

StringBuilder 클래스 (System.Text)

변경할 수 있는 문자열을 나타냅니다. 이 클래스는 상속될 수 없습니다.

docs.microsoft.com

 

'백준 > 단계별' 카테고리의 다른 글

백준 10951 C#) A+B - 4  (0) 2022.04.18
백준 10871 C#) X보다 작은 수  (0) 2022.04.18
백준 2739 C#) 구구단  (0) 2022.04.17
백준 2884 C#) 알람 시계  (0) 2022.04.17
백준 14681 C#) 사분면 고르기  (0) 2022.04.17

댓글