Algorithm Problem Solving/Programmers

[프로그래머스] 월간 코드 챌린지 시즌2 2개 이하로 다른 비트 with Swift

코코자장자장 2022. 1. 28. 12:18

안녕하세요. 오늘은 프로그래머스 2개 이하로 다른 비트 문제를 풀어보겠습니다.

 

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr

 

이 문제는 비트연산 문제입니다.

 

문제의 제약조건을 보고 문제대로 풀다간 답이 없다 생각하고 다른 방법을 생각해보았습니다.

 

우선 짝수일때는 + 1을 하면 되는데

 

홀수 일때 어떻게 해야하는지가 고민이였습니다.

 

알고보니 짝수 홀수 상관없이 2진수로 바꿨을때 가장 낮은 자릿수의 0을 찾아 1로 바꿔주고 그 아래 자리의 1을 0으로 바꿔주면 되는 문제였습니다.

짝수일 때는 그 아래 자리의 0이 없으므로  해당 자리만 1로 바꿔줍니다.

 

실제로 코드로 짤때는 answer + 1 - ( 1 / 2 ) 이므로  1 / 2가 0으로 처리되므로 홀짝을 나눠줄 필요는 없습니다.

import Foundation

func solution(_ numbers:[Int64]) -> [Int64] {
    var answer = [Int64]()
    for i in numbers {
        var binaryValue = i
        var count:Int64 = 1
        while true {
            if binaryValue % 2 == 0 {
                answer.append(i + count - count / 2)
                break
            }
            count *= 2
            binaryValue /= 2
        }
    }
    return answer
}

 

오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!😀

 

오늘도 좋은 하루 되세요!