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