문제 해결 POINT
- 숫자가 짝수인 경우
- 짝수를 이진법으로 변환했을때 마지막 비트는 무조건 0이다.
따라서 마지막 비트를 0에서 1로 바꿔준 값이 답이기 때문에 숫자+1 값을 answer에 넣어준다.
- 짝수를 이진법으로 변환했을때 마지막 비트는 무조건 0이다.
- 숫자가 홀수인 경우,
- 가장 뒤쪽에 있는 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 타입의 숫자로 변환하고 결과 리스트에 추가한다.
'코딩테스트 준비(kotlin) > 기본' 카테고리의 다른 글
[프로그래머스 kotlin] 가장 큰 수 (0) | 2024.07.10 |
---|---|
[프로그래머스 kotlin] 할인 행사 (0) | 2024.06.21 |
[프로그래머스 kotlin] 행렬의 곱셈 (0) | 2024.06.20 |
[프로그래머스 kotlin] n^2 배열 자르기 (0) | 2024.06.19 |
[프로그래머스] 연속 부분 수열 합의 개수 (0) | 2024.06.18 |