안녕하세요. 오늘은 프로그래머스 2개 이하로 다른 비트 문제를 풀어보겠습니다.
이 문제는 비트연산 문제입니다.
문제의 제약조건을 보고 문제대로 풀다간 답이 없다 생각하고 다른 방법을 생각해보았습니다.
우선 짝수일때는 + 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
}
오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!😀
오늘도 좋은 하루 되세요!
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] Summer/Winter Coding(~2018) 영어 끝말잇기 with Swift (0) | 2022.02.04 |
---|---|
[프로그래머스] 월간 코드 챌린지 시즌1 삼각 달팽이 with Swift (0) | 2022.01.29 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 프렌즈4블록 with Swift (0) | 2022.01.27 |
[프로그래머스] 위클리 챌린지 피로도 with Swift (0) | 2022.01.26 |
[프로그래머스] 탐욕법(Greedy) 큰 수 만들기 with Swift (0) | 2022.01.25 |