문 제

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입 력

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

5

출 력

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

1
2
3
4
5

코 드

using System;
using System.Text;
using static System.Console;

namespace algorithm
{
    class Program
    {
        static void Main(string[] args)
        {
            // === 시간 초과.. === //
            // int N = int.Parse(ReadLine());

            // for (int i = 1; i <= N; i++)
            // {
            //     WriteLine(i);
            // }
            // === 시간 초과.. === //

            int N = int.Parse(ReadLine());
            StringBuilder num = new StringBuilder();

            for (int i = 1; i <= N; i++)
            {
                num.AppendLine(i.ToString());
            }

            Console.WriteLine(num);
        }
    }
}

공 부

Console.WriteLine 을 반복적으로 호출하게 되면 시간 초과 발생.. 왜?

  1. I/O 작업 :

콘솔에 쓰기에는 I/O(입력/출력) 작업이 포함되며 이는 계산과 같은 다른 작업에 비해 상대적으로 느릴 수 있음. 특히 루프나 자주 실행되는 코드 블록 내에서 Console.WriteLine을 빠르게 연속해서 여러 번 호출하는 경우 지연이 감지될 수 있습니다.

  1. 출력 버퍼링 :

콘솔 출력은 버퍼링될 수 있음. 즉, 표시하기 전에 일정량의 데이터를 수집한다는 의미! 이 버퍼링으로 인해 콘솔에서 출력을 보는 데 지연이 발생할 수 있음. 특히 여러 WriteLine 문을 매우 빠르게 실행하는 경우 더욱 가능성이 큼.

  • 해결책으로 문자열 조합에 유용한 ‘StringBuilder’를 사용!

복 습

  • string
    • 변경할 수 없는 문자열
    • 변경을 하면 변경된 문자열을 위한 새로운 string을(클래스) 생성
    • 반복적인 변경은 성능 저하의 원인
  • StringBuilder
    • ‘System.Text’ 네임스페이스 필요
    • 문자열 변경이 빈번한 작업에 용이
    • 메서드
      • .Append
      • .AppendLine
      • .Insert
      • .Replace
      • .Length
      • .ToString()