[알고리즘] 백준 2729 (파이썬)

wonsik·2022년 4월 10일
1

알고리즘

목록 보기
3/15

import sys
'''
 내 풀이방법 
 이진수를 int로 더하고 뒤에서부터  2면 10으로 바꾸고 3이면 11로 바꿈
 맨 앞은 범위 밖이기 때문에 따로 조건을 통해 2나3이면 새로 1을 append

'''


a = int(input())
from collections import deque

for i in range(a):
    x,y = map(int,input().split())

    ans = x+y
    # print(ans)
    ans = deque(list(map(int,str(ans))))
    # print(ans)
    for j in range(len(ans)):
        tar = -(j+1)
        if ans[tar] == 0 or ans[tar] == 1:
            continue
        elif ans[tar] == 2:
            if j == len(ans)-1:
                ans[tar] = 0
                ans.appendleft(1)
            else:
                ans[tar] = 0
                ans[tar-1] += 1
        elif ans[tar] ==3:
            if j == len(ans)-1:
                ans[tar] = 1
                ans.appendleft(1)
            else:
                ans[tar] = 1
                ans[tar-1] += 1
    print(''.join(map(str,ans)))


'''
다른 풀이
2진수들을 10진수로 바꾸고 더한다음에 다시 2진수로 바꿈
int(num, 2)  --> 2진수의 num을 10진수로 바꿈
bin(num)   --> 10진수의 num을 2진술 바꿈 (이때 str type으로 변환)
'''

n = int(sys.stdin.readline().rstrip())
for _ in range(n):
    a,b = input().split(" ")
    a = int(a,2)
    b = int(b,2)

    c = bin(a + b)
    print(type(a))
    print(type(c))
    print(bin(a+b))
    print(bin(a + b).replace("0b", ""))

이번 문제를 풀면서
2진수나 3진수도 int로 사용하려고 했던 실수를 고쳤다.
int() 내장함수는 무조건 10진수이고, int(1001,2) 이건 10진수로 1001일 수도 있기 때문에 옆에 몇 진수에서 10진수로 바꾸는 건지 명시.

10진수를 2진수로 바꾸는 함수는 bin()이고 string 타입이다.

profile
새로운 기술을 배우는 것을 좋아하는 엔지니어입니다!

0개의 댓글