본문 바로가기
C#/C# : Baekjoon

[백준] C# : 빠른 A+B (15552번)

by TODAYCODE 2021. 7. 22.
반응형

백준 단계별로 풀어보기 3단계 for문 4번 문제

 

15552번: 빠른 A+B

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

www.acmicpc.net

 

문제의 핵심.

1. StringBuilder를 사용할 수 있는가?

 


 

기존의 방식대로 string을 사용해서 출력을 하게되면

무조건 시간초과가 발생하는 문제이다.

 

string은 사용하면 할수록 처리 속도가 느려지게 된다.

이유를 설명하려면 다소 복잡한데...

 

약간 간략하게 압축해서 설명하자면,

int나 float는 값형식인 것에 비해서, string 형식은 참조형식이다.

 

또한, string 변수를 변형하거나 바꾸는 등의 작업을 수행하면

저장되었던 값이 바뀌는 것이 아니라

새로운 저장공간에 새로운 string이 생성되는 방식이다.

 

그러다보니 string을 많이쓰면 쓸수록 공간이 낭비되고 속도가 느려진다.

 

c#에서는 이를 방지하기 위해 StringBuilder라는 것이 존재한다.

먼저, StringBuilder를 사용하려면

using System.Text; 를 적어줘야만 한다.

 

스트링빌더에 대해서 간단히 설명하면

문자열을 한번에 통합적으로 관리한다고 생각하면 된다.

Append()

AppendLine()

메소드를 사용해서 문자열을 담아둘 수 있다.

출력할 때는 ToString()으로 뽑아낸다.

 

그리고 아직 배열문제에 진입하지는 않았지만,

효과적으로 문제를 풀기위해서 어쩔 수 없이 배열을 사용했다.

 

 

 

정답 코드

using System;
// StringBuilder를 사용하기 위해서.
using System.Text;

namespace for문4
{
    class Program
    {
        static void Main(string[] args)
        {
            // 스트링빌더 answer 선언
            StringBuilder answer = new StringBuilder();

            // 테스트케이스 개수 입력 받음
            int t = int.Parse(Console.ReadLine());
            
            // 더하기 때 사용할 int를 배열로 생성함
            int[] a = new int[t];
            int[] b = new int[t];

            for (int i = 0; i < t; i++)
            {
                // 숫자를 입력받고 공백을 기준으로 나눠 담을 수 있게 문자열 배열을 선언한다.
                string[] s = Console.ReadLine().Split();
                // 입력받은 문자를 int형으로 변환해서 저장한다.
                a[i] = int.Parse(s[0]);
                b[i] = int.Parse(s[1]);
                
                // 각 숫자를 더한뒤 문자열로 변환하고 answer에 집어 넣음
                answer.AppendLine((a[i] + b[i]).ToString());
            }
            // 출력
            Console.WriteLine(answer.ToString());
        }
    }
}
반응형

'C# > C# : Baekjoon' 카테고리의 다른 글

[백준] C# : 기찍 N (2742번)  (0) 2021.07.22
[백준] C# : 빠른 A+B (15552번)  (0) 2021.07.22
[백준] C# : 합 (8393번)  (0) 2021.07.22
[백준] C# : A+B - 3 (10950번)  (0) 2021.07.22
[백준] C# : 구구단 (2739번)  (0) 2021.07.22

댓글