[LeetCode] 67. Add Binary (Easy)
문제로 내가 푼 것 틀림 정답 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Solution { public String addBinary(String a, String b) { StringBuilder result = new StringBuilder(); int i = a.length() - 1; int j = b.length() - 1; int carry = 0; while (i >= 0 || j >= 0) { int digitA = (i >= 0) ? a.charAt(i) - '0' : 0; int digitB = (j >= 0) ? b.charAt(j) - '0' : 0; int sum = digitA + digitB + carry; result.append(sum % 2); carry = sum / 2; i--; j--; } if (carry != 0) { result.append(carry); } return result.reverse().toString(); } } 참고 1 2 int digitA = (i >= 0) ? a.charAt(i) - '0' : 0; int digitB = (j >= 0) ? b.charAt(j) - '0' : 0; a.charAt(i)와 b.charAt(j)는 char 타입의 값을 반환합니다. 이는 문자열의 특정 위치에 있는 문자입니다. ‘0’는 또한 char 타입입니다. 하지만, 자바에서 char 타입은 실제로는 정수 값(유니코드 값)을 가지며, ‘0’의 유니코드 값은 48입니다. 따라서, a.charAt(i) - ‘0’는 char 타입 값에서 char 타입 값 ‘0’을 빼는 연산을 수행합니다. 이 때, 자바는 자동으로 char 타입을 int 타입으로 변환하여 빼기 연산을 수행합니다. 예를 들어, a.charAt(i)가 ‘1’이면, 이는 유니코드 값 49를 가집니다. 따라서 49 - 48은 1이 되어, 결국 digitA는 1이 됩니다. 결과적으로, a.charAt(i) - ‘0’는 문자 ‘0’에서 ‘9’ 사이의 문자를 해당하는 정수 값 0에서 9로 변환합니다. 이는 자동 형변환을 통해 이루어집니다. 1 2 result.append(sum % 2); carry = sum / 2; sum은 int 타입이며, 2는 리터럴 정수 타입입니다. % 연산자와 / 연산자는 int 타입끼리의 연산을 수행하며, 결과도 int 타입입니다. 이 과정에서 특별한 형변환은 일어나지 않지만, 연산의 결과가 int 타입으로 유지됩니다.