나의 풀이
class Solution {
fun addBinary(a: String, b: String): String {
val lenA = a.length
val lenB = b.length
if (lenA < lenB) return addBinary(b, a)
val sb = StringBuilder()
val revA = a.reversed()
val revB = b.reversed()
var up = false
for (i in 0 until lenB) {
var sum = (revA[i].toInt() - '0'.toInt()) + (revB[i].toInt() - '0'.toInt())
if (up) {
up = false
sum++
}
if (sum >= 2) {
up = true
sum -= 2
}
sb.append(sum.toString())
}
for (i in lenB until lenA) {
var sum = revA[i].toInt() - '0'.toInt()
if (up) {
up = false
sum++
}
if (sum >= 2) {
up = true
sum -= 2
}
sb.append(sum.toString())
}
if (up) sb.append("1")
return sb.reversed().toString()
}
}
가독성 높은 풀이
class Solution {
fun addBinary(a: String, b: String): String {
val sb = StringBuilder()
var i = a.length - 1
var j = b.length - 1
var up = 0
while (i >= 0 || j >= 0 || up == 1) {
val c = if (i >= 0) a[i--] - '0' else 0
val d = if (j >= 0) b[j--] - '0' else 0
val e = c + d + up
sb.append(e % 2)
up = e / 2
}
return sb.reversed().toString()
}
}