24.02.14 TIL - 알고리즘 : 백준, 빠른 A+B (15552번) | StringBuilder 클래스의 Append & AppendLine

JJwoo·2024년 2월 21일

알고리즘

목록 보기
14/18

풀이 1 : 시간초과

        static void Main(string[] args)
        {
            // 테스트 케이스 T
            int T = int.Parse(Console.ReadLine());

            int[] a = new int[T];
            int[] b = new int[T];


            // 다음 T줄에 각각 정수 A, B
            for (int i = 0; i< T; i ++)
            {
                string[] ab = Console.ReadLine().Split(" ");
                a[i] = int.Parse(ab[0]);
                b[i] = int.Parse(ab[1]);
            }

            // A+B 출력 
            for (int i = 0; i < T; i++)
            {
                Console.WriteLine(a[i] + b[i]);
            }
  • 예제처럼 출력은 되지만 시간 초과가 뜬다.

    시간 초과 이유

    String은 참조형이라 작업 수행 시 새로운 공간에 새로운 String 데이터가 생성되어 성능을 잡아먹기에, 문제에서 요구하는 시간 내에 출력되지 않았음.


풀이2 : StringBuilder 사용

StringBuilder

  • 문자열을 수정할 때 새로운 문자열 객체를 생성하지 않기 때문에, 문자열 조작 작업이 많을 때 훨씬 더 효율적
  • 그래서 위와 같은 상황에서 메모리 사용을 줄이고 성능을 향상시키는 데 좋음.
using System;
using System.Text; // StringBuilder를 사용하기 위해 필요

class Program
{
    static void Main(string[] args)
    {
        // 테스트 케이스 T
        int T = int.Parse(Console.ReadLine());

        // StringBuilder 인스턴스 생성
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < T; i++)
        {

            string[] ab = Console.ReadLine().Split();
            int a = int.Parse(ab[0]);
            int b = int.Parse(ab[1]);

            // 결과를 StringBuilder에 추가
            sb.AppendLine((a + b).ToString());
        }

        // 최종 결과 출력
        Console.Write(sb.ToString());
    }
}
  • StringBuilder의 인스턴스를 생성 : 테스트 케이스 T의 결과들을 담을 것.

  • 각 테스트 케이스에 대해 입력을 받고, 계산된 결과를 StringBuilder에 추가.

  • AppendLine 메소드를 사용하여 각 결과 뒤에 새 줄을 추가.

모든 테스트 케이스T에 대한 계산이 완료되면, StringBuilderToString 메소드를 호출하여 저장된 모든 문자열을 한 번에 출력.


Append와 AppendLine

C#의 StringBuilder 클래스에서 문자열을 구성하기 위해 사용되는 메서드.

Append 메서드는 StringBuilder 인스턴스의 끝에 특정 문자열을 추가한다.
문자열, 숫자, 문자 등 다양한 형태의 데이터 추가 가능.

예시)

StringBuilder sb = new StringBuilder();
sb.Append("Hello");
sb.Append(" World");
// sb의 내용: "Hello World"
  • AppendLine은 줄바꿈을 추가해주는 것.
profile
개발 모코코

0개의 댓글