- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/77885
Lv2 문제이다!
처음엔 dp나 어떤 규칙이 있어야 풀릴 것 같아서 찾다가 안돼서 결국 풀이 찾아본 문제이다
생각보다 규칙은 간단했다
숫자가 짝수라면 오른쪽 끝이 무조건 0이므로 이를 1로 바꿔주면 된다.
숫자가 홀수라면 가장 오른쪽에 있는 0을 1로 바꿔주고, 그 오른쪽에 있는 값을 0으로 바꿔준다(01 -> 10) 이렇게 하면 더 큰 수로 비트 두 개를 변경할 수 있다.
연산을 마친 2진수 숫자는 10진수 숫자로 변경한 다음 answer에 추가해준다
- 정답 풀이 :
def solution(numbers):
answer = []
for number in numbers:
bin_number = list('0' + bin(number)[2 : ])
index = ''.join(bin_number).rfind('0') #가장 오른쪽에 있는 0의 인덱스
bin_number[index] = '1'
if number % 2 == 1:
bin_number[index + 1] = '0'
#2진수를 10진수로 변환해서 추가
answer.append(int(''.join(bin_number), 2))
return answer
'코딩테스트 > 기출' 카테고리의 다른 글
[연습 문제 / 프로그래머스] 12899번 : 124 나라의 숫자 (1) | 2022.10.10 |
---|---|
[연습 문제 / 프로그래머스] 131127번 : 할인 행사 (0) | 2022.10.10 |
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17686번 : [3차] 파일명 정렬 (0) | 2022.09.26 |
[Summer/Winter Coding(~2018) / 프로그래머스] 49994번 : 방문길이 (0) | 2022.09.26 |
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17679번 : [1차] 프렌즈4블록 (0) | 2022.09.23 |