백준

백준 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());
            }
        }
    }
}