📌프로그래머스 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 |