프로그래머스
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 의 값을 더해주는 코드를 작성하여, 통과 완료한 문제 입니다.