프로그래밍 문제

[백준][C#] 15552번, 빠른 A+B

sorry0101 2023. 10. 12. 17:33

문제

https://www.acmicpc.net/problem/15552

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

반례

x

풀이

더보기
using System;
using System.IO;
using System.Text;

namespace CodingTest
{
    class Program
    {
        static void Main()
        {
            StringBuilder builder = new StringBuilder();
            string[] values;

            int T = int.Parse(Console.ReadLine());

            for (int i = 0; i < T; i++)
            {
                using (StringReader sr = new StringReader(Console.ReadLine()))
                {
                    values = sr.ReadLine().Split(" ");
                    int a = int.Parse(values[0]);
                    int b = int.Parse(values[1]);

                    builder.Append((a + b) + "\n");
                }
            }

            Console.WriteLine(builder);
        }
    }
}
더보기
using System;
using System.Text;

namespace CodingTest
{
    class Program
    {
        static void Main()
        {
            StringBuilder builder = new StringBuilder();
            string[] values;

            int T = int.Parse(Console.ReadLine());

            for (int i = 0; i < T; i++)
            {
                values = Console.ReadLine().Split(" ");
                int a = int.Parse(values[0]);
                int b = int.Parse(values[1]);

                builder.Append($"{a+b}\n");
            }

            Console.WriteLine(builder);
        }
    }
}

Comment

기존에 하던대로 for문에서 입력을 받아서 바로 출력하는 방식으로 돌려봤는데 바로 시간 초과 ㅋㅋ

더보기
using System;

namespace AlgorithmTest
{
    class cSharpPractice
    {
        static void Main()
        {
            int T = int.Parse(Console.ReadLine());

            string[] cases;
            for (int i = 0; i < T; i++)
            {
                cases = Console.ReadLine().Split(" ");
                int a = int.Parse(cases[0]);
                int b = int.Parse(cases[1]);

                Console.WriteLine(a + b);
            }
        }
    }
}

정확히 찾아보니 Console.Write() 는 사용할때마다 flush() 연산을 해서 무겁다고 한다.

flush() 가 뭔지 찾아보니 버퍼에 있는 것을 모두 출력하는 것이라고 한다.

(명확하게 무엇인지 파악되지 않아서 추후 더 조사해봐야하지 않을까...)

 

그래서 위의 코드는 시간초과라는 결과가 나온 것으로 보여진다.

stringbuilder 을 통해 값을 저장한 후 한번에 출력하는 방향으로 해야겠다.


참고

https://www.acmicpc.net/board/view/22716

https://heroine-day.tistory.com/50