카테고리 없음

67. Add Binary

땅다람쥐 2022. 1. 11. 15:18

문제

 - String으로 주어진 Binary 두 개를 더하기

 

해결방안

 - 케이스별로 String에 char을 추가해주기

 - char이 추가될 때 정답의 반대 방향으로 추가되기 때문에 마지막에 reverse 사용해주기

 

Steps

Step 1

StringBuilder output = new StringBuilder();
int aSize = a.length() - 1;
int bSize = b.length() - 1;
boolean two = false;

리턴 할 변수, 두 string의 사이즈 그리고 2가 나왔을 때 0을 더해 줄 변수를 선언해줍니다.

 

Step 2

 while(aSize >= 0 || bSize >= 0){
            //if the size of inputs is not the same, use '0' to make the same size. For example, '11' + '1' = '11' + '01'.
            char charA = (aSize >= 0) ? a.charAt(aSize--) : '0';
            char charB = (bSize >= 0) ? b.charAt(bSize--) : '0';
            /* Four cases of adding Binary
            0 + 0 = 0
            1 + 0 = 1
            1 + 1 = 10
            1 + 1 + 1 = 11
            */
            if(charA == '1' && charB == '1'){
                output = (two) ? output.append('1') : output.append('0');
                two = true;
            } else if (charA == '0' && charB == '0'){
                output = (two) ? output.append('1') : output.append('0');
                two = false;
            } else {
                output = (two) ? output.append('0') : output.append('1');
            }
        }

그리고 두 string inputs을 하나하나 끝에서 부터 살펴보게 되는데요. charA와 charB는 string의 각 letter를 저장하게 되는데 만약에 string inputs의 사이즈가 다르면 0을 넣어주면서 길이를 같게 만들어줍니다.

 

binary 연산을 할 때는 위 보기처럼 4 가지 케이스가 있습니다. 그래서 두 string의 letter 값이 1이면 two를 true로 만들어주면서 다음 연산을 할 때 1을 더해주는 식으로 했습니다. 만약에 1을 더해주면 그 다음에는 two를 false로 만들어주게 되구요.

 

Step 3

	if(two == true){
            output.append('1');
        }
        
        return output.reverse().toString();

마지막으로 loop이 끝났을 때 two의 값이 true이면 1을 더해줘야 되기 때문에 한 번 더 더해줍니다. 그리고 output의 값을 reverse로 해서 return 해주면 됩니다.

 

StringBuilder vs. String

String 대신 StringBuilder를 사용하는 이유는 한 줄로 간단히 말해서 시간과 메모리 때문인데요. 이와 관련해서는 나중에 따로 포스팅 하도록 하겠습니다.