코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 0 이진수 더하기

_알파카 2024. 3. 20. 16:53
728x90

문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

 

내 풀이

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

 

이진수를 다루는 부분은 잘 몰라서 다른 사람의 풀이를 보고 풀었다. 

int함수를 이용해 먼저 bin1, bin2을 정수형 숫자로 변환한다. 

그 후, 합을 구한 후, 2진수로 변환하기 위해 bin( )을 사용한다. 

bin(a + b)의 결과는 "0b101"과 같이 나오기 때문에 2번째 인덱스 부터의 값을 반환한다. 

 

N진수 -> 10진수

int 함수의 2번째 인자를 활용해서 N 진수의 문자열을 정수형(int) 숫자로 형변환할 수 있다. 

# 2진수 문자열 -> 10진수 정수로 변경
int('문자', 2)

# 8진수 문자열 -> 10진수 정수로 변경
int('문자', 8)

# 16진수 문자열 -> 10진수 정수로 변경
int('문자', 16)

 

10진수 -> 2, 8, 16진수

# 10진수 -> 8진수 문자열
oct(11)
# 0o13

# 10진수 -> 16진수 문자열
hex(11)
# 0xb

# 10진수 -> 2진수 문자열
bin(11)
# 0b1011

 

10진수 -> N진수

10진수에서 2, 8, 16진수 외의 다른 진법으로 변환은 코드 작성이 필요하다. 

def solution(n, q):
    rev_base = ''

    while n > 0:
        n, mod = divmod(n, q)
        rev_base += str(mod)

    return rev_base[::-1] 
    # 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
    
print(solution(45, 3))
# 1200

 

N진수 -> N진수

위의 코드를 활용하여 N진수를 10진수로 변경한 후, 다시 N진수로 변경

print(solution(int('c',16),4)) # 16진수인 C를 4진수로 바꾸는것
# 30

print(solution(int('4',6),3))  # 6진수인 4를 3진수로 바꾸는것
# 11

print(solution(int('21',3),7)) # 3진수인 21을 7진수로 바꾸는것
# 10

print(solution(int('15',9),5)) # 9진수인 15를 5진수로 바꾸는것
# 24

 

728x90