def solution(numbers):
answer = []
for x in numbers:
x = int(x) # 7,8,9번 런타임 에러 문제의 입력 오류
arr = list('0'+bin(x)[2:])
index = ''.join(arr).rfind('0')
arr[index] = '1'
if x % 2 != 0:
arr[index+1] = '0'
answer.append(int(''.join(arr), 2))
return answer
풀이
1. 각 숫자마다
- 2진수로 바꾸고 맨 앞에 '0'을 추가 (슬라이싱 : bin을 이용해서 2진수로 바꾸면 앞에 '0b'라는 표시가 있어서 제거)
- index : 뒤에서부터 처음 '0'이 등장하는 인덱스 (rfind : 오른쪽부터 find)
- index의 값을 '1'로 바꿔주기
- 홀수일 경우, index+1의 값을 '0'으로 바꿔주기
- anwer에 10진수로 바꿔서 append (int('2진수 문자열', 2) : 2진수의 10진수화)
2. answer 리턴
2 이하의 비트 차이가 나는 수중 가장 작은 수를 구할 경우
짝수일 경우 : 맨 마지막 0을 1로 교체 (1비트 차이의 가장 작은 수)
홀수일 경우 : 맨 마지막 0을 1로 교체하고 다음 위치를 0으로 교체 (2비트 이하 차이의 가장 작은 수)
문제의 오류가 있었다.
7, 8, 9번에 런타임 오류가 발생했는데 분명 문제에서는 정수라고 했다.
numbers의 각 숫자를 int화 해주고 실행하면 해결
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv2 - 영어 끝말잇기 (파이썬) (0) | 2022.04.13 |
---|---|
[프로그래머스] Lv2 - 삼각 달팽이 (파이썬) (0) | 2022.04.11 |
[프로그래머스] Lv2 - 피로도 (파이썬) (0) | 2022.04.06 |
[프로그래머스] Lv2 - 배달 (파이썬) (0) | 2022.04.05 |
[프로그래머스] Lv2 - 괄호 회전하기 (파이썬) (0) | 2022.04.05 |