
프로그래머스 2개 이하로 다른 비트 Kotlin
DoDoBest
·2024. 4. 25. 10:43
https://school.programmers.co.kr/learn/courses/30/lessons/77885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

로직
짝수인 경우에는 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 (3) | 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 |