«   2025/09   »
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
Recent Posts
Tags more
Today
Total
관리 메뉴

내 인생은 개발 중

[프로그래머스] 이진 변환 반복하기 - Python 본문

Algorithm/프로그래머스

[프로그래머스] 이진 변환 반복하기 - Python

seul.e 2024. 5. 8. 23:47

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

 

프로그래머스

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

programmers.co.kr

 

처음 풀이

def solution(s):
    cnt = 0
    zero_cnt = 0

    # s가 1이 되면 반복문 종료
    while s != '1':

        #0의 갯수 세어주기
        zero_cnt += s.count('0')
        # 0 없애기
        s = s.replace('0', '')
        # s의 길이를 2진수로 변환
        s = str(format(len(s), 'b'))
        # 변환 횟수 + 1
        cnt += 1

    return [cnt, zero_cnt]

 

나중 풀이

def solution(s):
    cnt = 0
    zero_cnt = 0

    # s가 1이 되면 반복문 종료
    while s != '1':

        #1의 갯수 세어주기
        length = s.count('1')
        # 전체 길이 - 1의 갯수 = 0의 갯수
        zero_cnt += len(s) - length
        # s의 길이를 2진수로 변환
        s = str(format(length, 'b'))
        # 변환 횟수 + 1
        cnt += 1

    return [cnt, zero_cnt]

 

💡알게된 점💡

bin() 함수와 format() 함수를 알게 되었다!

처음엔 bin 함수를 이용해서 풀었는데 bin 함수를 이용하면 `ob + 2진수 변환 수` 이렇게 출력되기 때문에

format 함수를 찾아서 사용했다.

format(n, 'b') 여기서 'b'는 이진수를 뜻한다.

근데 다른 사람들 풀이를 찾아보니 bin 함수를 사용해서 bin(num)[2:] 이렇게 사용하기도 했다.

그리고 나는 0을 replace 이용해서 바꿔줄 생각만 했었는데 어차피 2진수는 0과 1로만 이루어져 있으니

1의 갯수를 구해 전체 길이에서 빼주면 더 쉽게 0을 구할수도 있었다.

필기 시험 끝나면 알고리즘 하루에 2문제씩은 풀어야겠땨!

 

Comments