이진수 더하기

2024. 8. 31. 18:00코딩테스트 입문

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

 

프로그래머스

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

programmers.co.kr


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


제한사항

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

입출력 예

bin1 bin2 result
"10" "11" "101"
"1001" "1111" "11000"

입출력 예 설명
입출력 예 #1

  • 10 + 11 = 101 이므로 "101" 을 return합니다.

입출력 예 #2

  • 1001 + 1111 = 11000 이므로 "11000"을 return합니다.

이진수끼리의 덧셈을 구하는 문제입니다.

 

이런 문제를 볼 때마다 만약 파이썬을 사용하지 않았더라면 이진수를 십진수로, 다시 십진수를 이진수로 바꿔야 했다고 생각합니다.

파이썬은 bin, ocd, hex로 2진수, 8진수, 16진수를 지원하기 때문에 걱정할 필요가 없습니다. 물론 10진수로의 변환도 지원하고요.

 

우선 파이썬의 bin를 사용해서 문제를 풀어보겠습니다.

def solution(bin1, bin2):
    # bin1(2진수), bin2(2진수)를 int를 10진수로 변환합니다.
    # 둘의 합을 bin를 사용해 2진수로 변환합니다.
    answer = bin(int(bin1, 2) + int(bin2, 2))
    # 앞에 붙는 0b를 제거합니다.
    return answer[2:]

int을 사용해 2진수를 10진수로 바꾼 뒤, 덧셈을 계산합니다.

그 다음 bin을 사용해 다시 2진수 문자열로 변환한 다음, 앞에 붙는 0b(2진수) 표시를 삭제하기 위해 슬라이싱을 사용합니다.

이러면 2진수 문자열을 구할 수 있습니다.

 

bin 함수가 없다면 어떻게 풀어야 할까요? 아무래도 제 생각엔 직접 10진수를 구하는 방법밖에는 생각나지 않네요.

반복문을 사용해서 10진수를 구하고, 계산 결과를 다시 2진수로 변환해보겠습니다.

def solution(bin1, bin2):
    # 10진수 변수 int1, int2를 선언합니다.
    int1, int2 = 0, 0
    # bin1을 int1으로 변환합니다.
    for b in bin1:
        int1 = 2 * int1 + int(b)
    # bin2를 int2로 변환합니다.
    for b in bin2:
        int2 = 2 * int2 + int(b)
    # 이진수의 합을 계산합니다.
    int3 = int1 + int2
    # 이진수의 합을 나타낼 bin3
    bin3 = ''
    # int3이 0일 때, "0"을 반환합니다.
    if int3 == 0:
        return "0"
    # 10진수를 2진수로 변환합니다.
    while int3 > 0:
        # 나머지를 추가합니다.
        bin3 += str(int3 % 2)
        # 2로 나눈 몫을 구합니다.
        int3 //= 2
    # bin3을 뒤집으면 이진수가 완성됩니다.
    bin3 = bin3[::-1]
    return bin3

2진수를 10진수를, 10진수를 2진수로 변환해보았습니다.

 

2진수를 10진수로 바꿀 때는 for문을 사용해서, 기존의 값 * 2 + 현재 값을 구하면 10진수로 바꿀 수 있습니다.

반대로 10진수를 2진수로 바꿀 때는 while문을 사용해서, 2로 나눈 나머지를 기록한 다음 이걸 뒤집으면 2진수로 바꿀 수 있습니다.

 

함수를 사용하지 않으면 이렇게 길게 돌아가야 하네요. 역시 파이썬이 좋습니다.

'코딩테스트 입문' 카테고리의 다른 글

k의 개수  (0) 2024.09.02
A로 B 만들기  (0) 2024.09.01
치킨 쿠폰  (0) 2024.08.30
로그인 성공?  (0) 2024.08.29
등수 매기기  (2) 2024.08.28