프로그래머스 : 2개 이하로 다른 비트
2021. 10. 21. 04:23ㆍ문제풀기/프로그래머스
https://programmers.co.kr/learn/courses/30/lessons/77885
2진수로 변환했을 때, 다 1로 이루어져 있는 경우는 10111...의 꼴이 2개 이하로 비트가 다르면서 가장 작은 수이므로 다 1로 이루어져 있는 경우와 아닌 경우를 구분해서 시행한다.
1로 이루어져 있는 경우는, 오른쪽에서 왼쪽으로 이동해가면서 0을 만나면 1로 만나고, 해당 위치의 바로 오른쪽이 1이라 0으로 바꿀 수 있으면 바꿔준다.
* 0일 때는 예외처리를 꼭 해줘야한다!
def get_binary(n):
answer = []
now = 2
while n>0:
answer.append(n%now)
n = n//now
answer.reverse()
return answer
def get_deci(binary_arr):
now = 1
answer = 0
for i in range(len(binary_arr)-1,-1,-1):
answer += now * binary_arr[i]
now *= 2
return answer
def solution(numbers):
answer = []
for i in numbers:
if i == 0:
answer.append(1)
continue
binary_arr = get_binary(i)
if len(binary_arr) == binary_arr.count(1):
binary_arr = [1,0] + binary_arr[1:]
else:
for i in range(len(binary_arr)-1,-1,-1):
if binary_arr[i] == 0:
binary_arr[i] = 1
if i+1<len(binary_arr) and binary_arr[i+1]==1:
binary_arr[i+1] = 0
break
answer.append(get_deci(binary_arr))
return answer
'문제풀기 > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 2018 카카오 Blind Recruitment 3차 방금 그곡 (0) | 2021.10.23 |
---|---|
프로그래머스 : 영어 끝말잇기 (0) | 2021.10.21 |
프로그래머스 : 섬 연결하기 (0) | 2021.10.19 |
프로그래머스 : 단어 변환 (0) | 2021.10.19 |
프로그래머스 : 다리를 지나는 트럭 (0) | 2021.10.19 |