ETC

[LeetCode / Kotlin] Add Binary

최호랭 2024. 7. 12. 01:14
반응형

문제

Given two binary strings a and b, return their sum as a binary string.

 

Example 1:

Input: a = "11", b = "1"
Output: "100"

 

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

 

 

Constraints:

  • 1 <= a.length, b.length <= 104
  • a and b consist only of '0' or '1' characters.
  • Each string does not contain leading zeros except for the zero itself.

 

나의 풀이

1. 자리수가 안맞는것을 포맷팅한다.

2. 뒤에서부터 비교하며 연산을 한다.

 

... 유틸을 잘 알았다면 아래처럼 1줄로 가능함.

더보기
더보기

class Solution {
    fun addBinary(a: String, b: String): String {
        return (a.toBigInteger(2) + b.toBigInteger(2)).toString(2)
    }
}

 

class Solution {
    fun addBinary(a: String, b: String): String {
        val ans = StringBuilder()
        
        val maxLength = maxOf(a.length, b.length)
        val formattedA = if (a.length != maxLength) { 
            "0".repeat(maxLength - a.length) + a
        } else a
        val formattedB = if (b.length != maxLength) { 
            "0".repeat(maxLength - b.length) + b
        } else b
        var flag = false
        
        for (i in 0 until maxLength) {
            val pa = formattedA.get(maxLength -1 - i)
            val pb = formattedB.get(maxLength -1 - i)
            
            val sum = pa.toString().toInt() + pb.toString().toInt() + (if (flag) 1 else 0)
            if (sum < 2) {
                flag = false
                ans.append(sum.toString())
                continue
            }
            
            flag = true
            ans.append((sum - 2).toString())
            
        }
        
        if (flag) {
            ans.append("1")
        }
        
        return ans.reverse().toString()
        
    }
}
반응형