

flush연산을 설명하기 전에 먼저 버퍼링과 스트림에 대해 알고 있어야한다.
입력과 출력에는 입력 버퍼, 출력 버퍼란 것이 존재하는데, 입력을 받을 때는 입력 버퍼에 데이터를 모은 뒤, 버퍼 내부의 데이터를 한 번에 이동시키고, 출력을 할 때는 출력 버퍼에 출력할 데이터들을 저장한 뒤, 마찬가지로 한 번에 출력한다.
flush 연산은 이러한 버퍼에 남아있는 데이터들을 다음 작업을 위해 비우는 작업을 수행합니다.
버퍼에 존재하는 데이터를 비우는 작업은 많은 소요 시간을 필요로 하기 때문에 기존 방법대로 이 문제를 푼다면 Console.WriteLine() 함수를 호출할 때마다 flush 연산이 수행되어 비교적 오래 걸리게 되는 것이다.
C#의 StringBuilder는 변경할 수 없는 string과 달리 변경 가능한 문자열을 나타내는데 사용하는 클래스이다. string 객체는 값이 변경되면 메모리에서 이전 참조 값을 버리고 새로운 참조 값으로 변경되지만, StringBuilder 객체는 참조 값이 변경되지 않고 힙 메모리에서 값이 삽입, 추가, 제거된다.
다음은 stringBuilder를 사용해서 문제를 푼 코드이다.
using System; using System.Text; namespace backjoon { class Program { static void Main(string[] args) { StringBuilder sb = new StringBuilder(); int t = int.Parse(Console.ReadLine()); for (int i = 0; i < t; i++) { string[] num = Console.ReadLine().Split(); sb.Append(int.Parse(num[0]) + int.Parse(num[1]) + "\n"); } Console.WriteLine(sb.ToString()); } } }