■ 10757번 큰 수 A + B 문제
■ 코드 풀이
이 문제를 봤을 때 '너무 쉬운데?'라는 생각을 했습니다. 알고 보니, 파이썬에서만 쉬운 거였습니다. 다른 언어에서는 큰 수 연산 과정에서 메모리 초과가 발생한다고 합니다. 처음 알았네요. 그래서 파이썬은 아래와 같은 코드면 쉽게 문제를 풀 수 있습니다.
A, B = map(int, input().split())
print(A+B)
하지만 이렇게 풀면 공부가 안 되겠죠? 제 나름대로 머리를 굴려서 아래와 같이 코드를 바꿔봤습니다. 어디서 들은 건(?) 있어서 두 개의 큰 수를 string으로 입력받고, 이를 거꾸로 뒤집어서 일의 자리부터 더하는 코드를 만들어봤습니다.
정답은 맞게 나오는데, 제출해 보니 시간 초과가 나오네요. 아마 정말 '엄청나게 큰 수'가 들어오면 for loop를 도는데 시간이 오래 소요돼서 그런 것 같습니다. 더 공부를 하고 싶으시다면, 간단한 방법 말고 저처럼 한 단계 더 코딩해 보시면 좋을 듯합니다.
A,B = input().split()
# 큰 수를 A로 설정
if len(A) <= len(B):
A,B = B,A
# 1의 자리가 앞으로 오게 reverse
A = A[::-1]
B = B[::-1]
carry = 0 # 덧셈의 값이 10을 넘었을 경우 다음 자리로 전달해주는 변수
total = [] # 덧셈 결과를 담는 list
# 짧은 숫자 기준
for i in range(len(B)):
num = int(A[i]) + int(B[i]) + carry
carry = 0
if num >= 10:
carry = num // 10 # 10으로 나눈 몫을 다음 자리로 전달
num = num % 10 # 10으로 나눈 나머지를 num에 update
total.append(num)
# 마지막 carry 값을 긴 자리 숫자에 반영
while carry >= 1:
if len(B) == len(A):
total.append(carry)
break
else:
num = int(A[len(B)]) + carry
if num >= 10:
carry = num // 10
num = 10 % num
total.append(num)
# 큰 수 A의 남은 자리를 total에 입력
if len(A) > len(B):
for i in A[len(total):len(A)+1]:
total.append(i)
for i in total[::-1]:
print(i, end ="")
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 5086번 배수와 약수 문제 (0) | 2023.04.12 |
---|---|
[백준/Python] 2501번 약수 구하기 문제 (0) | 2023.04.12 |
[백준/Python] 2869번 달팽이는 올라가고 싶다 문제 (0) | 2023.04.10 |
[백준/Python] 2292번 벌집 문제 (0) | 2023.04.09 |
[백준/Python] 2903번 중앙 이동 알고리즘 문제 (0) | 2023.04.08 |
댓글