본문 바로가기

개발/Algorithm

[Algorithm] 빠른 A+B 구하기 (C#) - String, Stringbuilder

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

 

 

 

원래 구하던 방식으로 print를 했더니 출력이 시간초과가 되었다. (Console.WriteLine)

 

백준 알고리즘 사이트에 C#의 빠른 입출력 방식은?

 - StreamReader로 읽고, StringBuilder로 출력을 모아 놓았다가 그 String을 Console.WriteLine하는 방법이 있습니다. BufferedStream과 StringWriter로 조금 더 향상시킬 수 있는 것 같으나 자세한 것은 다른 분의 답변을 기다리겠습니다.

 

위와 같이 나와있다.

 

그럼 StringStringBuilder의 차이는 무엇일까?

둘다 문자열을 조합하는 방법이다.

 

String

   - Value type이 아닌 ref 타입이다. (문자열 조합시 새로운 class 생성 GB에 의해 수집) 

   - 문자열 조합할때마다 부하가 발생한다. -> 메모리 낭비가 발생해 비효율적인 코드가 생성된다.

   - 문자수가 적을경우, 문자열을 작성하는 동안 광범위한 검색작업이 예상될때 사용된다.

 

StringBuilder

   - 문자열을 조합할때마다 새로운 변수를 생성할 필요가 없다.

   - 내부 자체적으로 함수를 가지고 있으며 값들을 조합하고 삭제할때 인스턴스를 추가 발생시키지 않는다.

   - 설계시 알 수 없는 횟수의 문자열을 변경해야 할 때, 문자열에서 많은 횟수의 변경이 예상될때 사용된다.

 

 

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

 

   StrubgBuilder builder = new StrubgBuilder();

   for(int i = 0; i < cnt; i++)

   {

     string[] str = Console.ReadLine().Split(' ');

     builder.Append((int.Parse(str[0]) + int.Parse(str[1])).To.String() + "\n");

   

   Console.WriteLine(builder.ToString());

위 코드로 문제를 맞췄댜ㅠㅜ 오래 걸렸당 ㅠㅜㅠㅜ