본문 바로가기
코딩테스트/구현

[python] Lv.2 프로그래머스: 이진 변환 반복하기

by brown_board 2023. 3. 8.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

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
def solution(s):
    global cnt_0 # 0제거 카운트
    global cnt_binary  #이진화 카운트
    global binary_array
    binary_array = []
    array = []
    if s == "1":
        return
    for i in s:
        if i == "0"# 원소가 0일때
            cnt_0 +=1
        else# 원소가 1일때
            array.append("1")
    binary(len("".join(array))) # 0모두 제거 후 문자열길이를 이진화
    cnt_binary += 1
    solution("".join(binary_array))
    return [cnt_binary, cnt_0]
 
def binary(b):
    #binary가 1,0이면 값추가
    if b ==1 or b==0:
        binary_array.append(str(b))
    else:
        binary(b//2)
        binary_array.append(str(b%2))
 
cnt_0 = 0 # 0제거 카운트
cnt_binary = 0 #이진화 카운트
cs

 

풀이: 이진화를 하기위해 새로운 함수를 만들었다. 다른 사람들의 풀이가 궁금했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solution(x):
    answer = []
    
    cnt = 0
    zero = 0
    
    while True:
        if x == '1':
            break
        zero = zero + x.count("0")
        x = x.replace("0""")
        
        x = bin(len(x))[2:]
        
        cnt = cnt + 1
    
    answer = [cnt, zero]
    
    return answer
cs

bin이라는 이진화 함수와 0을 세고 지우기 위해 count와 replace함수를 썼다는 게 신기했다.
count함수와 replace함수에 대한 방법을 배워야겠다.

728x90

댓글