본문 바로가기
코딩테스트 준비(kotlin)/기본

[프로그래머스 kotlin] 2개 이하로 다른 비트

by 1chanhue1 2024. 7. 8.

 

문제 해결 POINT 

  • 숫자가 짝수인 경우
    • 짝수를 이진법으로 변환했을때 마지막 비트는 무조건 0이다.
      따라서 마지막 비트를 0에서 1로 바꿔준 값이 답이기 때문에 숫자+1 값을 answer에 넣어준다.
  • 숫자가 홀수인 경우,
    • 가장 뒤쪽에 있는 0을 1로 바꿔주고 그다음 비트를 0으로 바꿔주면 된다.
    • 예를 들어 7(0111) 은 가장 뒤쪽에 있는 0을 1로 바꿔주고 그다음 비트를 0으로 바꿔준다. 즉, 11(1011)이 답이다.
    • 그리고 9(1001) 은 1001 -> 1011 -> 1010 으로 10이 답이다.

 

풀이코드 

fun solution(numbers: LongArray): LongArray {
    val answer = mutableListOf<Long>()

    for (number in numbers) {
        if (number % 2 == 0L) {
            answer.add(number + 1)
            continue
        }

        var numberBin = "0" + number.toString(2)
        val rindex = numberBin.lastIndexOf('0')
        numberBin = numberBin.substring(0, rindex) + "10" + numberBin.substring(rindex + 2)
        answer.add(numberBin.toLong(2))
    }

    return answer.toLongArray()
}

 

  • 짝수 처리: number % 2 == 0L 인 경우, number + 1을 결과로 추가한다.
  • 홀수 처리:
    • number.toString(2)로 2진수 문자열로 변환한다.
    • lastIndexOf('0')로 가장 오른쪽의 '0' 위치를 찾는다.
    • 해당 위치의 '0'을 '10'으로 변경한다.
    • 변경된 2진수 문자열을 toLong(2)를 사용하여 다시 Long 타입의 숫자로 변환하고 결과 리스트에 추가한다.