TIL/kotlin 알고리즘

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

crablo 2024. 3. 21. 10:54
728x90

해당 문제를 풀기위해 맨처음 이진수로 변환하는 방법에대해 먼저 생각하게되었다.

toInt(2) 나 toString(2)로하면 2진정수나 스트링 타입으로 나타낼 수 있다고 찾게되었다.

그 후 문제를 다시 읽어보면서 규칙을 찾았다.

숫자가 짝수일때는 1을 더한 값이 결과가 되었고,

홀수인경우는 조금 복잡했다.

먼저 나는 변수n이라고두고,

for문안에서 아래와 같이 작성했다.

 

for(number in numbers){

  //홀수인경우, 이진수 문자열로 변환하고 역순으로 만듦

var n = number.toString(2).reversed() + '0'

//0이 처음으로 나타나는 인덱스를 찾음

val zero = n.indexOf('0')

//0이 나타나는 비트를 변경하여 다음 수를 생성하고, 역순으로 만든 뒤 결과에 추가

n = (n.substring(0,zero-1) + "01" + n.substring(zero+1)).reversed()

answer.add(n.toLong(2)) //결과를 10진수로 변환하여 결과에 추가

}

 

이런 방식으로 문제를 해결해보니 정답이 나오게 되었다.

728x90