Kotlin/코딩테스트

[프로그래머스] 2개 이하로 다른 비트 - kotlin

깨노비 2023. 4. 17. 00:16
728x90
반응형

문제 설명
양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.

x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
예를 들어,

f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.

class Solution {
    fun solution(numbers: LongArray): LongArray {
        var answer = arrayListOf<Long>()

        for (number in numbers) {
            val str: String = number.toString(2)
            val lastZero: Int = str.indexOfLast { it == '0' }

            when (lastZero) {
                (str.length - 1) -> answer.add(number + 1)

                -1 -> {
                    val incStr = "10" + str.substring(1)
                    answer.add(incStr.toLong(2))
                }

                else -> {
                    val incStr = str.substring(0, lastZero) + "10" + str.substring(lastZero + 2)
                    answer.add(incStr.toLong(2))
                }
            }
        }

        return answer.toLongArray()
    }
}
728x90
반응형