2개 이하로 다른 비트
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
- 내 풀이
- 이진수에 0이 하나도 없는 경우, 가장 끝이 0 인경우, 가장 끝이 1인경우로 나눠서 계산
- 가장 끝이 0 인경우: 1 더하면 1개만 바뀐 수
- 가장 끝이 1인 경우: 가장 뒷쪽에 있는 0 위치의 값과, 그 뒤에 있는 값 2개만 변해야함
- 이진수 길이 = 가장 뒷편인 0의 인덱스 값과 동일하기 때문에
- → 사실상 짝수인경우(가장 끝이 0인경우), 홀수 인경우(가장 끝이 1인경우) 로 보는거랑 똑같음
- (이진수에 0이 하나도 없는 경우가 끝이 1인 경우에 포함)
- idx찾을 때 리버스한 다음에 index 사용했는데 문자열에 rfind 하는 방법도 있음
- 이진수에 0이 하나도 없는 경우, 가장 끝이 0 인경우, 가장 끝이 1인경우로 나눠서 계산
def solution(numbers):
answer=[]
for num in numbers:
bin_num=[0]+list(map(int,bin(num)[2:]))
idx=list(reversed(bin_num)).index(0)
l=len(bin_num)-1
if idx>=l: #0이 없는 경우
answer.append(num+2**(l-1))
elif idx==0: #0이 제일 끝에 있는 경우
answer.append(num+1)
else: #0이 가운데 끼인 경우
answer.append(num+2**(idx-1))
return answer
- 다른 사람 코드
- 짝수/홀수로 나눠서 봄
- int(s, 2)를 해주면 2진수 s를 10진수로 변환
def solution(numbers):
answer = []
for number in numbers:
bin_number = list('0' + bin(number)[2:])
idx = ''.join(bin_number).rfind('0')
bin_number[idx] = '1'
if number % 2 == 1:
bin_number[idx+1] = '0'
answer.append(int(''.join(bin_number), 2))
return answer
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [SQL][WITH][비트] 언어별 개발자 분류하기 (1) | 2025.05.15 |
|---|---|
| [프로그래머스] 연속 펄스 부분 수열의 합 (1) | 2025.05.13 |
| [프로그래머스][Heap] 호텔 대실 (0) | 2025.05.02 |
| [프로그래머스][백트래킹][순열] 불량 사용자 (0) | 2025.04.25 |
| [프로그래머스][BFS] 리코쳇 로봇 (1) | 2025.04.24 |