

나의 코드
#이진수로 만듬
def bit(n):
bit=''
while True:
bit+=str(n%2)
n=n//2
if n==0:
break
bit = bit[::-1]
return bit
#비트를 계속 비교해가면서 다른 비트 개수가 2개이하면
#whlie break 하고 그에따른 10진수 answer에 삽입
def solution(numbers):
answer = []
for i in numbers:
first_bit = bit(i)
while True:
i+=1
other_dit = bit(i)
other_count = 0
for j in range(-1,-(len(first_bit)+1),-1):
if first_bit[j] != other_dit[j]:
other_count+=1
other_count += len(other_dit) - len(first_bit)
if other_count <= 2:
answer.append(i)
break
#print(answer)
return answer
solution([2,7])

결과... 뭐가 단단히 잘못됨 ㅋㅋㅋㅋ..... 뭐가 문제지 ㅠㅠㅠㅠ 결국 검색해봄
진짜 대단한 사람들 많은거같다
1) 짝수일경우 맨뒤에가 항상 0 즉, 맨뒤에만 1로바뀌므로 바로 다음 십진수가 2개이하임(100=1100100, 101=1100101)
2) 홀수일경우 맨뒤에가 항상 1로 끝날것, 다음 비트가 0이면 1로바꾸고 아니면 그 다음 비트를 보면됨
즉, 오른쪽부터 0이 언제나오는지 보고 이것을 1로 바꾸면 된다 . 그후 1로바꾼 자리다음(오른쪽)에 있는 1을 0으로 바꾸면 됨(9=1001, 1010 = 10이됨)
코드구현
#이진수로 만듬
def bit(n):
bit=''
while True:
bit+=str(n%2)
n=n//2
if n==0:
break
bit = bit[::-1]
return bit
def solution(numbers):
answer = []
for i in numbers:
if i%2==0:
answer.append(i+1)
continue
bin_num = '0'+bit(i)
#print(bin_num)
bin_num = bin_num[:bin_num.rindex('0')] + '10' + bin_num[bin_num.rindex('0')+2:]
answer.append(int(bin_num,2))
#print(answer)
return answer
solution([2,7])
느낀점 : 아직 많이 부족하다...
'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글
| 롤케이크 자르기 (0) | 2023.05.20 |
|---|---|
| 다리를 지나는 트럭 (0) | 2023.05.20 |
| 숫자 변환하기 (1) | 2023.05.17 |
| 2 x n 타일링 (0) | 2023.05.15 |
| 뒤에 있는 큰 수 찾기 (0) | 2023.05.15 |