<Easy> Add Binary (LeetCode : C#)

이도희·2023년 3월 19일
0

알고리즘 문제 풀이

목록 보기
35/185

https://leetcode.com/problems/add-binary/

📕 문제 설명

두 이진수 a와 b가 주어질 때 합을 binary 문자열로 반환

  • Input
    두 이진수 a, b
  • Output
    두 이진수의 합 (string)

예제

풀이

숫자 올림은 1의 개수랑 관련 있어서 해당 부분을 확인하며 진행

  1. 맨 마지막 올라갈 수 있으니 기존 string 중 더 긴 길이 + 1로 answer 배열 만들기
  2. 각 string 뒤집어서 준비
  3. string 중 max 길이만큼 돌면서 해당 index에 있는 1 개수 세기
    3-1) 1 개수가 0개 또는 1개인 경우 그대로 숫자 그대로
    3-2) 1 개수가 2 또는 3인 경우 숫자는 0, 1로 두고 그 다음 올림을 위해 up 숫자 반영
  4. answer 다시 뒤집고 up이 남아있으면 제일 앞 문자 1로 변경, 그렇지 않으면 제일 앞 문자 substring 후 답 반환
public class Solution {
    public string AddBinary(string a, string b) {

        char[] aRev = a.Reverse().ToArray();
        char[] bRev = b.Reverse().ToArray();
        int ansLen = Math.Max(a.Length, b.Length) + 1;

        char[] ansRev = new char[ansLen];
        ansRev[ansLen - 1] = 'E';
        int up = 0;

        for (int i = 0; i < ansLen - 1; i++)
        {
            int oneCnt = up;
            up = 0;
            if (i < a.Length && aRev[i] == '1') oneCnt ++;
            if (i < b.Length && bRev[i] == '1') oneCnt ++;

            switch (oneCnt)
            {
                case 0:
                    ansRev[i] = '0';
                    break;
                case 1:
                    ansRev[i] = '1';
                    break;
                case 2:
                    ansRev[i] = '0';
                    up++;
                    break;
                case 3:
                    ansRev[i] = '1';
                    up++;
                    break;
            }
        }

        Array.Reverse(ansRev);
        string answer = "";
        if (up != 0)
        {
            ansRev[0] = '1';
            answer = string.Concat(ansRev);
        } 
        else
        {
            answer = string.Concat(ansRev);
            answer = answer.Substring(1, answer.Length - 1);
        }

        return answer;

        
    }
}

결과

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글