문 제
자연수 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 을 반복적으로 호출하게 되면 시간 초과 발생.. 왜?
- I/O 작업 :
콘솔에 쓰기에는 I/O(입력/출력) 작업이 포함되며 이는 계산과 같은 다른 작업에 비해 상대적으로 느릴 수 있음. 특히 루프나 자주 실행되는 코드 블록 내에서 Console.WriteLine을 빠르게 연속해서 여러 번 호출하는 경우 지연이 감지될 수 있습니다.
- 출력 버퍼링 :
콘솔 출력은 버퍼링될 수 있음. 즉, 표시하기 전에 일정량의 데이터를 수집한다는 의미! 이 버퍼링으로 인해 콘솔에서 출력을 보는 데 지연이 발생할 수 있음. 특히 여러 WriteLine 문을 매우 빠르게 실행하는 경우 더욱 가능성이 큼.
- 해결책으로 문자열 조합에 유용한 ‘StringBuilder’를 사용!
복 습
- string
- 변경할 수 없는 문자열
- 변경을 하면 변경된 문자열을 위한 새로운 string을(클래스) 생성
- 반복적인 변경은 성능 저하의 원인
- StringBuilder
- ‘System.Text’ 네임스페이스 필요
- 문자열 변경이 빈번한 작업에 용이
- 메서드
- .Append
- .AppendLine
- .Insert
- .Replace
- .Length
- .ToString()