문제
- 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를 사용하는 이유는 한 줄로 간단히 말해서 시간과 메모리 때문인데요. 이와 관련해서는 나중에 따로 포스팅 하도록 하겠습니다.