반응형
Notice
Recent Posts
Recent Comments
Link
동캄의 코딩도장
프로그래머스 level2 [2개 이하로 다른 비트] 파이썬 본문
반응형
https://programmers.co.kr/learn/courses/30/lessons/77885
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
#프로그래머스 2개 이하로 다른 비트
def solution(numbers):
answer = []
for number in numbers:
b=bin(number)[2:]
k=(number+1)
while True:
b_=bin(k)[2:]
cross=[0]*(len(b_))
d=len(b_)-len(b)
for i in range(len(b)):
if b[i]==b_[d+i]:
cross[i]=0
else:
cross[i]=1
for i in range(d):
cross.append(1)
if 1<=cross.count(1)<=2:
answer.append(k)
break
k+=1
return answer
처음에는 완전탐색으로 number를 기준으로 값을 1씩 더하면서, 차이를 계산하였는데 시간초과가 발생하였다.
#프로그래머스 2개 이하로 다른 비트
def solution(numbers):
from collections import deque
answer = []
for number in numbers:
bit=bin(number)[2:]
bit=deque(list(map(str,bit)))
zero_cnt=bit.count('0')
leng=len(bit)
if zero_cnt==0:
bit.appendleft('1')
bit[1]='0'
elif zero_cnt==1:
ind=bit.index('0')
if ind==(len(bit)-1):
bit[ind]='1'
else:
bit[ind]='1'
bit[ind+1]='0'
else:
for i in range(len(bit)-1,0,-1):
if bit[i]=='0':
break
if i==(len(bit)-1):
bit[-1]='1'
else:
bit[i]='1'
bit[i+1]='0'
answer.append(int(''.join(bit),2))
return answer
number를 이진수로 바꾼 bit의 0의 개수를 기준으로 조건문을 전개하였다.
0개: 맨 앞에 1을 붙이고, 다음수는 0으로 바꾼다.
1개: 0인 ind를 찾는다. 마지막숫자가 0이면 숫자를 1로 바꾸고, 그렇지 않다면 0을 1로 바꾸고 다음수를 0으로 바꾼다.
2개: 0이나오는 i를 찾는다. 찾으면 반복문 탈출 후, 마지막숫자가 0이면 숫자를 1로 바꾸고, 그렇지 않다면 0을 1로 바꾸고 다음수를 0으로 바꾼다.
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
프로그래머스 level2 [가장 큰 수] 파이썬 (0) | 2021.12.08 |
---|---|
프로그래머스 level2 [가장 큰 정사각형 찾기] 파이썬 (0) | 2021.12.08 |
프로그래머스 level2 [예상 대진표] 파이썬 (0) | 2021.12.07 |
프로그래머스 level2 [영어 끝말잇기] 파이썬 (0) | 2021.12.07 |
프로그래머스 level2 [모음사전] 파이썬 (0) | 2021.12.07 |