여니의 취준 준비/코딩테스트 (Python)

[프로그래머스] 이진 변환 반복하기 in python + (bin, oct, hex 내장함수)

여니's 2022. 7. 1. 14:22

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

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

 

이 문제는

입력받은 문자열의 개수를 이진법으로 바꿨을때의 값이

1이 될 때까지 아래 과정을 반복하는 것!

 

 

1. 입력 받은 문자열에서 0을 모두 제거한다.

2. 1의 개수를 이진법으로 변환한다. 

3. 이진법으로 변환한 값이 딱 "1"이 될 때까지 위 과정을 반복한다.

 

 

def solution(s):
    zero_cnt=0 # 0의 개수
    change_cnt=0 # 변환 횟수

    while s!='1': 
        # 1. 0 제거
        word=''
        for i in s:
            if i=='1':
                word+=i
            else:
                zero_cnt+=1
        after_cnt=len(word) # 1의 개수
            
        # 2. 이진 변환
        change_word=''
        change_cnt+=1
        
        while after_cnt>=1:
            change_word+=str(after_cnt%2)
            after_cnt=after_cnt//2
        s=change_word[::-1]

    answer=[change_cnt,zero_cnt]
    return answer

 

 

< 다른 사람 풀이 >

bin 함수

-> 10진수를 2진수로 변환해주는 함수!

 

[2:]를 해주는 이유는?

-> bin(10)을 하게 되면 '0b1010'이라는 값이 나온다.

여기서 0b를 없애줘야 한다!

 

def solution(s):
    change_cnt, zero_cnt = 0, 0
    while s != '1':
        change_cnt += 1
        num = s.count('1')
        zero_cnt += len(s) - num
        s = bin(num)[2:] # 이진수로 변환
    return [change_cnt,zero_cnt]

 

파이썬 : 2진수, 8진수, 16진수 다루기

=> 내장함수 사용!

 

 

1. 10진수 -> X진수

10진수 -> 2진수

: bin(숫자 혹은 다른 진수로 나타낸 값)

 

 

10진수 -> 8진수

: oct(숫자 혹은 다른 진수로 나타낸 값)

 

10진수 -> 16진수

: hex(숫자 혹은 다른 진수로 나타낸 값)

 


2. X진수 -> 10진수

int(값, X)

 

2진수 -> 10진수

int(값, 2)

 

8진수 -> 10진수

int(값, 8)

 

16진수 -> 10진수

int(값, 16)

 

 

 

 

 

 

참고 사이트

https://www.daleseo.com/python-int-bases/

 

[파이썬] 2진수, 8진수, 16진수 다루기

Engineering Blog by Dale Seo

www.daleseo.com