백준
백준 15552번 c#
대왕군
2024. 1. 10. 16:30
첫 번째 방법
using System;
using System.IO;
using System.Text;
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
//Console.ReadLine과 Console.Write를 대체할 StreamReader와 StreamWriter이다
//사실 이 둘 안쓰고 StringBuilder만 써도 충분히 빨라서 문제 통과는 된다
//그럼에도 StreamReader와 StreamWriter를 쓴 이유는 어딘가에서 이걸쓰면 더 빨라진다는
//글을 보았기 때문이다
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
//이번 문제의 핵심 StringBuilder이다
//일반적으로 출력시 문장의 갯수만큼 WriteLine을 해줘야하지만
//StringBuilder를 쓴다면 AppendLine을 사용하여 출력값을 쌓아뒀다가 WriteLine으로 한번에 출력이 가능하다
//이래서 더 빨라지는 듯 하다(아마도 맞을거임..)
StringBuilder sb = new StringBuilder();
//문제의 갯수
int input = int.Parse(sr.ReadLine());
//문제의 첫번째, 두번째 값을 받을 배열
string[] result = new string[2];
//띄어쓰기를 기준으로 첫번째, 두번째 값을 나눈 뒤
//int형으로 변환후 계산한다 이후 다시 string으로 변환후
//AppendLine을 이용해 결과값을 쌓아놓는다
for (int i = 0; i < input; i++)
{
result = sr.ReadLine().Split();
sb.AppendLine((int.Parse(result[0]) + int.Parse(result[1])).ToString());
}
//쌓아뒀던 결과값 한번에 출력
sw.WriteLine(sb.ToString());
//메모리 누수, 예기치 않은 동작을 막기위해 꼭 Close 해주기
//sr.Dispose();나 sw.Dispose(); 이 방식 써도 됨
sr.Close();
sw.Close();
}
}
}
두 번째 방법
using System;
using System.IO;
using System.Text;
namespace Baekjoon
{
internal class Program
{
static void Main(string[] args)
{
//첫번째 방식과 다른게 거의 없음
//차이점은 using을 써서 StreamReader와 StreamWriter를 사용했다는 점이다
//이렇게 되면 자동으로 Dispose를 해주어 Close나 Dispose를 따로 써주지 않아도 된다
using (StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput())))
using (StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput())))
{
StringBuilder sb = new StringBuilder();
int input = int.Parse(sr.ReadLine());
string[] result = new string[2];
for (int i = 0; i < input; i++)
{
result = sr.ReadLine().Split();
sb.AppendLine((int.Parse(result[0]) + int.Parse(result[1])).ToString());
}
sw.WriteLine(sb.ToString());
}
}
}
}