알고리즘/LeetCode

[LeetCode/easy] Add Binary

녕이 2022. 8. 12. 16:38
728x90

 

 

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

 

Add Binary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

정수끼리 더하는 방법을 생각하다가 그냥 컴퓨터 시스템 시간에 배웠던 연산 방법을 생각했다.

c라는 변수를 두고 올림수가 생기면 이를 여기에 넣어주고 같이 연산해주는 것이다.

 

 

1. 더 짧은 문자열을 동일한 길이로 만들어준다. 앞에 0 붙여주기

2-1) (1, 1)의 경우, 결괏값은 0인데 c의 값을 체크해야 한다. 만약 c가 1이라면 1, 0이라면 0을 넣어준다. c의 값도 변경해준다.

2-2) (0,0)의 경우, 결과값은 0.  만약 c가 1이라면 1, 0이라면 0을 넣어준다

2-3) (1,0) 혹은 (0,1)의 경우, 결괏값은 1. 만약 c가 1이라면 0, 0이라면 1을 넣어준다.

         이때 c의 값도 변경해줘야 하는데, 이전 c의 값에 따라 달라진다. 이전 c가 1이었다면 1, 0이었다면 0

         1 + 0 = 1 인데 여기서 c = 1을 더하면 10 된다. 그러므로 이번 c = 1

3) 마지막에 c에 담긴 값이 1인지 확인하고 맞다면 추가해준다. (이 부분을 빼먹으면 안 된다)

 

 

string addBinary(string a, string b) {
    string answer = "";
    char c = '0';
    if(a.size() > b.size()){
        for(int i=b.size(); i<a.size(); i++) b = '0' + b;
    }else if(a.size() < b.size()){
        for(int i=a.size(); i<b.size(); i++) a = '0' + a;
    }
    
    for(int i=a.size()-1; i>=0; i--){
        char x;
        if(a[i] == b[i] && b[i] == '1'){
            x = (c == '1') ? '1' : '0';
            c = '1';
            answer = x + answer;
        }else if(a[i] == b[i] && b[i] == '0'){
            x = (c == '1') ? '1' : '0';
            c = '0';
            answer = x + answer;
        }else{
            x = (c == '1') ? '0' : '1';
            c = (c == '1') ? '1' : '0';
            answer = x + answer;
        }
    }
    if(c == '1') answer = '1' + answer;
    return answer;
}

 

 

 

 

728x90