프로그래머스/파이썬_입문

이진수 더하기

싱싱한복초이 2025. 1. 14. 10:04

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[문제 설명]

이진수를 의미하는 두 개의 문자열 bin1 bin2가 매개변수로 주어질 때, 두 이진수의 합을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • return 값은 이진수를 의미하는 문자열입니다.
  • 1 ≤ bin1, bin2의 길이 ≤ 10
  • bin1과 bin2는 0과 1로만 이루어져 있습니다.
  • bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

[나의 풀이]

def solution(bin1, bin2):
    bin1 = bin1.zfill(len(bin2))
    bin2 = bin2.zfill(len(bin1))

    carry = 0
    result = []
    
    for i in range(len(bin1)-1,-1,-1):
        sum_ = int(bin1[i]) + int(bin2[i]) + carry
        result.append(str(sum_ % 2))
        carry = sum_ // 2
        
    if carry:
        result.append('1')
        
    return ''.join(result[::-1])

 

[다른 풀이]

 

1)

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

 

2)

def solution(bin1, bin2):
    answer = 0
    bin1_size = len(bin1)
    bin2_size = len(bin2)

    sum = 0

    for i in bin1:
        sum += int(i) * (2 ** (bin1_size - 1))
        bin1_size -= 1

    for i in bin2:
        sum += int(i) * (2 ** (bin2_size - 1))
        bin2_size -= 1

    answer = str(bin(sum))[2:]


    return answer

 

3)

def solution(bin1, bin2):
    bin1, bin2 = bin1[::-1], bin2[::-1]
    i, carry = 0, 0
    output = ""
    while i < len(bin1) or i < len(bin2) or carry:
        op1 = bin1[i] if i < len(bin1) else '0'
        op2 = bin2[i] if i < len(bin2) else '0'
        result = int(op1) + int(op2) + carry
        output += str(result % 2)
        carry = result // 2
        i += 1

    return output[::-1]

'프로그래머스 > 파이썬_입문' 카테고리의 다른 글

다음에 올 숫자  (1) 2025.01.15
치킨 쿠폰  (0) 2025.01.15
A로 B 만들기 + Counter()  (0) 2025.01.13
k의 개수  (0) 2025.01.12
로그인 성공? +dict()  (0) 2025.01.11