JLOG

[Python] 코드업 3021 : 큰 수 덧셈 풀이 본문

Algorithm/알고리즘 풀이

[Python] 코드업 3021 : 큰 수 덧셈 풀이

정정선선 2020. 5. 28. 16:42

https://codeup.kr/problem.php?id=3021

 

큰 수 덧셈

첫째줄과 둘째줄에 큰 수 a, b가 입력된다. (a, b는 100자리 이하의 정수)

codeup.kr

 

문제 설명

int는 32비트, long long 은 64비트라서 이 보다 더 큰 숫자는 저장할 수 없다.

int와 long long으로 저장할 수 있는 숫자보다 아주 큰 숫자의 덧셈을 하려고 한다.

계산 결과를 출력하시오.

 

입력

첫째줄, 둘째줄에 큰 수 a,b가 입력된다. (a, b는 100자리 이하의 정수)

 

출력

큰 수 덧셈의 결과를 출력한다.

 

 

 

풀이 코드

# 입력
a = list(map(int, list(input())))
b = list(map(int, list(input())))

# FOR TESTING
#a = 111
#b = 9999999
#a = list(map(int, list(str(a))))
#b = list(map(int, list(str(b))))

sum_result = []
flag = 0         # 자리수 올림 표시

# a를 항상 큰 수로 만들어주기
# b가 더 크면 a, b를 바꿔준다.
if len(a) < len(b) : #{
    tmp = a
    a = b
    b = tmp    
#}

# b의 자리수만큼 다 더해주기
for i in range(len(b)) : #{
    n_sum = a.pop() + b.pop() + flag
    
    if n_sum >= 10 : #{
        sum_result.append(n_sum - 10)
        flag = 1   
    #}
    else : #{ 
        sum_result.append(n_sum)
        flag = 0
    #}
#}

# 자리수 올림이 남았을 때 계속 더해주기
for i in range(len(a)) : #{
    if flag == 1 : #{
        n_sum = a.pop() + flag  
    #}
    else : 
      flag = 0
      break

    if n_sum >= 10 : #{
        sum_result.append(n_sum - 10)
        flag = 1
    #}
#}

#print(a)
#print(sum_result)

# 마지막 자리 수 올림이 남았을 때 새로운 자리 수 생성
if flag == 1 : sum_result.append(1)

# 숫자 자리 수에 맞게 reverse
sum_result.reverse()
# a의 남아 있는 높은 자리수와 결과를 합하기
a.extend(sum_result)

print("".join(list(map(str,a))))
Comments