728x90
https://programmers.co.kr/learn/courses/30/lessons/77885
이 문제는
1. 2진법으로 변환한 후
2. 2진법숫자를 오른쪽부터 왼쪽으로 탐색하며
0이 나오면 1로만들어줌.
1로만들어준 숫자 오른쪽에 1이 있으면 이걸 0으로 만들어줌
3. 변환한 숫자를 다시 10진법 숫자로 만들어줌
이 과정을 거치면된다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# 이진법 변환 함수
from collections import deque
def bi_trans(x):
li = ["0", "1"]
result = deque()
while x > 0:
result.appendleft(li[x % 2])
x = x // 2
result.appendleft("0")
return result
def check_num(li_x):
# 뒤에서부터 검사하며 0이 있으면 1로 바꾸고, 바뀐숫자 오른쪽에 1이 있을시 0으로 바꿔줌
for x in range(len(li_x) - 1, -1, -1):
if li_x[x] == "0":
li_x[x] = "1"
if len(li_x) > (x + 1):
li_x[x + 1] = "0"
break
return li_x
def bi_to_num(num_li):
number = 0
mul_num = 1
for i in range(len(num_li) - 1, -1, -1):
if num_li[i] == "1":
number += mul_num
mul_num *= 2
return number
def solution(numbers):
answer = []
for n in numbers:
target_num = bi_trans(n)
check_target = check_num(target_num)
answer.append(bi_to_num(check_target))
return answer
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV.2] 거리두기 확인하기(파이썬 / python) (0) | 2021.09.05 |
---|---|
[프로그래머스 LV 3] 자물쇠와 열쇠 (파이썬/python) (0) | 2021.07.03 |
[프로그래머스 LV 2] 후보키 (파이썬/python) (0) | 2021.06.30 |
[프로그래머스 LV 3] 경주로 건설 (파이썬/python) (0) | 2021.06.23 |
[프로그래머스 LV1 ] 다트 게임 (파이썬/python) (0) | 2021.06.23 |