[leetcode] 67. Add Binary

kldaji·2022년 9월 5일
0

leetcode

목록 보기
47/56

나의 풀이

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()
    }
}
profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.

0개의 댓글