코테 공부/python

[프로그래머스] Python 이진수 더하기

sweet-po 2023. 6. 13. 14:08

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

 

내풀이

분명 이진수 계산해주고 변환해주는 python 함수가 있을 거 같았지만 검색 안해보고

아집인지 고집인지 노가다로 한번 구현해보자 하는 마음으로 구현

def solution(bin1, bin2):
    sumbi = str(int(bin1) + int(bin2))

    for i in range(1, len(sumbi)):
        if int(sumbi[len(sumbi) - i]) >= 2:
            sumbi = sumbi[:len(sumbi) - i - 1] + str(int(sumbi[len(sumbi) - i - 1]) + 1) + str(int(sumbi[len(sumbi) - i]) % 2) + sumbi[len(sumbi) - i + 1:]
    
    if int(sumbi[0]) >= 2:
        sumbi = '1' + str(int(sumbi[0]) % 2) + sumbi[1:]
        
    return sumbi

 

타풀이

def solution(bin1, bin2):
    answer = bin(int(bin1,2) + int(bin2,2))[2:]
    return answer

 

int() 함수

밑(base) 사용하기

int(value, base) 정수로 변환할 값과 밑

default로  value = 0, base = 10 (base는 2~36사이)

int('0b101010', 2) #42
int('0o52', 8) #42
int('0x2a', 16) #42

 

참고

파이썬은 기본적으로 10진수 형태로 숫자 표현. 다른 진수로 표현하려면 접두어 붙여주어야함

2진수 : 0b

8진수 : 0o

16진수 : 0x

42 == 0b101010 #True
42 == 0o52 #True
42 == 0x2a #True

16진수에서 뒤에 붙은 a는 10 인듯 하다....?

 

bin(숫자) oct(숫자 ) hex(숫자) 함수를 통해 숫자를 각 진수 형태의 문자열로 변환 가능

bin(42) #'0b101010'
oct(42) #'0o52'
hex(42) #'0x2a'

bin(0b101010) #'0b101010'
oct(0b101010) #'0o52'
hex(0b101010) #'0x2a'
str(0b101010) #'42'

format()

format(42, 'b') #'101010'
format(42, 'o') #'52'
format(42, 'x') #'2a'
format(42, 'X') #'2A'
format(42, 'd') #'42'

format(42, '#b') #'0b101010'
format(42, '#o') #'0o52'
format(42, '#x') #'0x2a'
format(42, '#X') #'0X2A'

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