문제 설명
양의 정수 x에 대한 함수 f(x)를 다음과 같이 정의합니다.
- x보다 크고 x와 비트가 1~2개 다른 수들 중에서 제일 작은 수
예를 들어,
- f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다.
- f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다.
정수들이 담긴 배열 numbers가 매개변수로 주어집니다. numbers의 모든 수들에 대하여 각 수의 f 값을 배열에 차례대로 담아 return 하도록 solution 함수를 완성해주세요.
나의 풀이
이 문제는 특별한 알고리즘이 필요하지 않는 문제입니다.
숫자가 짝수일 때에는 2진법으로 변환했을 때 0이 가장 오른쪽에 오게 됩니다. 이때에는 현재 숫자에서 + 1만 해주면 원하는 값을 얻을 수 있습니다.
숫자가 홀수일 때에는 가장 오른쪽부터 0을 찾고 해당 위치와 바로 오른쪽 1의 값을 바꾸면 됩니다. 이를 진행하는 코드는 아래와 같습니다.
class Solution {
fun solution(numbers: LongArray): LongArray {
return numbers.map {
if (it % 2 == 0L) {
it + 1
} else {
val binary = it.toString(2).reversed() + "0"
val index = binary.indexOf('0')
val modifiedBinary = binary.substring(0, index - 1) + "01" + binary.substring(index + 1)
modifiedBinary.reversed().toLong(2)
}
}.toLongArray()
}
}
'프로그래머스 - kotlin > LEVEL 2' 카테고리의 다른 글
[프로그래머스] 디펜스 게임 - Java (우선순위 큐) (0) | 2023.10.25 |
---|---|
[프로그래머스] 메뉴 리뉴얼 - Kotlin (0) | 2023.10.18 |
[프로그래머스] 다리를 지나는 트럭 - Kotlin (Queue) (0) | 2023.10.13 |
[프로그래머스] 호텔 객실 - Kotlin, Java (0) | 2023.10.07 |
미로탈출 - Kotlin (BFS) (0) | 2023.06.08 |