본문 바로가기
프로그래머스

두 수의 합 (C#)

by LemongO 2024. 6. 3.

📌프로그래머스 181846

💡풀이

  • int.Parse로는 못 푸는 문제. string 길이가 100,000 이하이기 때문에 double을 사용해도 정확한 정수값으로 표현 할 수 없다
  • 문자열의 각 인덱스의 문자를 서로 더하는 문제
  • a와 b중 더 긴 길이를 가진 string을 for문의 범위로 설정
  • a[i] + b[i]가 10을 넘겼을 때 10의 자리를 더할 수 있도록 int 변수 하나를 선언
  • for문을 돌 때, a.Length - 1 - i 식을 이용해 가장 뒤인 1의 자리부터 더하는 방식을 사용
  • 이 때, 문자열의 길이가 i 보다 작으면 해당 자리수는 없는 것으로 간주해 0을 더함
  • 많은수의 문자열 할당이 일어나므로 StringBuilder를 반 필수적으로 사용
  • StringBuilder의 Append는 원하는 수를 역순으로 저장하기 때문에 Insert를 사용
public string 두수의합(string a, string b)
{
    StringBuilder sb = new StringBuilder();

    int longest = (int)MathF.Max(a.Length, b.Length);
    int carry = 0;

    for (int i = 0; i < longest; i++)
    {
        int aInt = i < a.Length ? a[a.Length - 1 - i] - '0' : 0;
        int bInt = i < b.Length ? b[b.Length - 1 - i] - '0' : 0;

        int sum = carry + aInt + bInt;
        int addChar = sum % 10;
        sb.Insert(0, addChar);

        carry = sum / 10;
    }

    if(carry > 0)
        sb.Insert(0, carry);

    return sb.ToString();
}

 

워낙 많은 수의 Insert 메서드를 사용하다보니 시간이 늘어나는 것은 불가피하다.

'프로그래머스' 카테고리의 다른 글

접미사 배열 (C#)  (0) 2024.06.03
인덱스 바꾸기 (C#)  (0) 2024.06.03
배열 만들기 3 (C#)  (0) 2024.06.02
간단한 식 계산하기 (C#)  (1) 2024.06.02
특별한 이차원 배열 1  (1) 2024.06.02