프로그래머스 2개 이하로 다른 비트 Kotlin
DoDoBest
·2024. 4. 25. 10:43
https://school.programmers.co.kr/learn/courses/30/lessons/77885
로직
짝수인 경우에는 1을 더해줬고
홀수인 경우에는 오른쪽에서 최초로 만나는 0 비트와 바로 뒤에 있는 1비트를 반전시켜줬습니다.
숫자의 비트를 확인하기 위해 string으로 변환하지 않고, 숫자 2에 2를 곱하면서 각 비트를 확인해줬습니다.
비트를 반전시키기 위해 xor 연산을 이용했습니다.
2를 곱하는 대신 shl, 2를 나누는 대신 shr 함수를 이용해도 됩니다.
class Solution {
fun solution(numbers: LongArray): LongArray {
val answer: LongArray = LongArray(numbers.size)
for ((idx, number) in numbers.withIndex()) {
answer[idx] = if (number % 2 == 0L) {
number + 1
} else {
operateBit(number)
}
}
return answer
}
fun operateBit(num: Long): Long {
var bit = 2L
var count = 1
while (true) {
if (bit.and(num) != bit) {
break
}
count++
bit *= 2 // bit = bit.shl(1)
}
return num.xor(bit).xor(bit/2) // return num.xor(bit).xor(bit.shr(1))
}
}
'코딩테스트' 카테고리의 다른 글
Kotlin 카카오 주차 요금 계산 - ConcurrentModificationException, HashMap, hashing (4) | 2024.09.04 |
---|---|
프로그래머스 모음사전 Kotlin (0) | 2024.04.25 |
Leetcode 42. Trapping Rain Water (0) | 2024.04.12 |
프로그래머스 시간 측정 오류와 H-Index 문제 (0) | 2024.04.09 |
Kotlin Boxing Type 쓰지 마세요 체질이라는게바뀝니다 (0) | 2024.03.26 |