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

vvo_ter·2022년 9월 21일
0

프로그래머스

목록 보기
5/28
post-thumbnail

💻 문제 - Lv.2


📝 2진수 변환

2진수 변환 함수 사용

  1. format 함수 이용
# 'b'는 2진수를 뜻한다.
binaryNum = format(n, 'b')
return binaryNum
  1. bin 함수 이용
binaryNum = bin(n)
# 'ob + 2진수 변환 수'를 반환하므로 ob를 제거하여 리턴
return binaryNum[2:]

2진수 변환 함수 사용 x

def getBinaryNum(n, lists):
    a, b = divmod(n, 2) # 몫, 나머지
    lists.append(b)
    if a == 0 :
        return lists
    else :
        return getBinaryNum(a, lists)

answerList = []
answer = getBinaryNum(n,answerList)
answer.sort(reverse=True)

return "".join([str(_) for _ in answer])
  • divmod() 내장 함수 사용
  • 몫이 0이 될 때까지 재귀 호출
  • sort()를 사용하여 나머지 순서 바꿔주기
  • join()을 사용하여 list를 str로 변환

👉 제출 코드

format 함수를 이용한다.

def solution(s):
    cnt = 0
    zero = 0
    while(1):
        if(len(s) == 1):
            break
        zero += s.count("0")
        s = s.replace("0", "")
        s = format(len(s), 'b')
        cnt += 1
        
    return [cnt, zero]

문자열 s가 1이 될 때까지(= 길이가 1일 때까지)

  • 제거할 0의 개수를 센다.
  • replace 함수로 0을 제거한다.
  • 제거한 문자열의 길이를 2진수로 변환한다.

🙏 다른 사람의 풀이 보기

def solution(s):
    cnt, zero = 0, 0
    while s != '1':
        cnt += 1
        num = s.count('1')
        zero += len(s) - num
        s = bin(num)[2:]
    return [cnt, zero]
  • bin 함수를 이용한다.
  • replace 함수를 쓰지 않고, 0의 개수를 len(s)에서 1의 개수를 빼서 계산한다.

👀 참고 자료

profile
's Coding Memory

0개의 댓글