728x90
반응형
두 이진 문자열을 입력으로 받아 그 합을 이진 문자열로 반환하는 문제입니다.
public class Solution {
public string AddBinary(string a, string b) {
StringBuilder sb = new StringBuilder();
int i = a.Length -1, j = b.Length -1, carry = 0;
while(i >= 0 || j >= 0){
int sum = carry;
if(j >= 0) sum += b[j--] - '0';
if(i >= 0) sum += a[i--] - '0';
sb.Insert(0,(char)((sum%2)+'0'));
carry = sum/2;
}
if(carry != 0){
sb.Insert(0,'1');
}
return sb.ToString();
}
}
a와 b의 문자열 길이의 -1 부터 시작하는 이유는 덧셈이 가장 낮은 자릿수에서 시작하여 가장 높은 자릿수로 진행되기 때문에 필요합니다.
각 자리의 합을 담는 변수인 sum을 선언합니다.
각 자리의 숫자는 char 값에서 '0'의 유니코드 값을 빼줌으로써, 실제 숫자로써의 0또는 1의 값을 가져올 수 있습니다.
합을 구한 후, 2로 나눈 나머지의 값을 '0' 유니코드 값과 합해주어 char 값의 0또는 1을 string builder 맨 앞에 추가합니다.
두 string이 끝날 때까지 반복한 후, 마지막 올림이 있는지 확인하여 맨 앞에 1을 추가할 지 안할 지 구별해줍니다.
728x90
반응형
'Leetcode' 카테고리의 다른 글
2704. To Be Or Not To Be (0) | 2024.05.07 |
---|---|
1581. Customer Who Visited but Did Not Make Any Transactions (0) | 2024.05.06 |
28. Find the Index of the First Occurrence in a String (0) | 2024.05.02 |
237. Delete Node in a Linked List (0) | 2024.05.01 |
203. Remove Linked List Elements (0) | 2024.05.01 |