프로그래머스

2개 이하로 다른 비트

끝까지 처음처럼 2022. 10. 31. 22:36
728x90
class Solution {
    fun solution(numbers: LongArray): LongArray {
        var answer: LongArray = longArrayOf()
        for(num in numbers){
            var number = "0" + num.toString(2)
            var count = 1L
            for(i in number.length-1 downTo 0){
                if(number[i] != '0'){
                    count *= 2L
                } else {
                    if(count > 1L){
                        answer += num + count/2L
                    } else answer += num + count 
                    break
                }
            }
        }
        return answer
    }
}

 

해당 문제는 숫자를 이진법으로 바꾼 후 0 이 처음 나온 자리에 따라 2^N 의 값을 더해주면 답이 나오는 문제 였습니다.

그전에 하나하나 비교하는 코드를 작성 하였었으나, 그렇게 할 경우 최대 입력값인 10^15 가 입력 될 경우 최상위 비트쪽에 문제가 생겨 시간 초과로 인하여 통과하지 못하여 처음에 말한것 처럼 2^N 의 값을 더해주는 코드를 작성하여, 통과 완료한 문제 입니다.