https://school.programmers.co.kr/learn/courses/30/lessons/181846
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(a, b):
return str(int(a) + int(b))
Lv.0에 정답률 90%짜리 문제인데, 생각보다 순순히 풀리지 않았다. 처음에는 당연히 위의 코드 블록처럼 문제를 풀었지만 틀렸다. 검색해봐도 다들 이렇게 풀어서 맞았다고 하는데 문제가 업데이트된 것 같다. 덧셈을 직접 구현해야 하는 상황이 왔다.
초등학교에서 처음 배우는 그 덧셈, 자리올림을 코드로 구현해야 하는건데, 자리올림이라는 개념 자체를 까맣게 잊고 살던 사람에게 이건 좀 막막했다. 뒤에서부터 더해야 한다는 건 알았는데, 7+9=16일 때 1을 앞 자리에 어떻게 넘겨줘야 하는지 감이 잡히지 않아서 AI의 도움을 받았다.
먼저 정수 범위인 19자리 이하라면 그냥 변환해서 더하고, 범위를 넘어가는 경우에만 직접 구현하도록 했다. 뒤에서부터 한 자리씩 더하면서 10을 넘으면 `carry`가 자리올림을 담당하고 나머지만 결과에 기록한다. 그렇게 숫자를 다 돌거나 자리올림이 끝나면, 뒤집어서 반환한다.
def solution(a, b):
# int 범위 안에서는 +로 덧셈
if len(a) <= 19 and len(b) <= 19:
return str(int(a) + int(b))
# int 범위를 넘어가는 경우, 각 자리를 더해주면서 올림 처리
# carry가 낮은 자리 → 높은 자리로 흐르기 때문에 뒤에서부터 접근
[a_idx, b_idx] = [len(a) - 1, len(b) - 1]
carry = 0
result = []
# 남은 자리가 있거나 올림이 남아있는 동안 반복
while a_idx >= 0 or b_idx >= 0 or carry:
a_digit = int(a[a_idx]) if a_idx >= 0 else 0
b_digit = int(b[b_idx]) if b_idx >= 0 else 0
total = a_digit + b_digit + carry
result.append(str(total % 10)) # 나머지(현재 자리 숫자)를 결과에 추가
carry = total // 10 # 몫은 다음 자리로 올림
a_idx -= 1
b_idx -= 1
# 뒤에서부터 쌓였으므로 뒤집어서 반환
return "".join(reversed(result))
'💻 coding test' 카테고리의 다른 글
| [programmers] 코딩 기초 트레이닝 완료 (0) | 2026.06.17 |
|---|---|
| [programmers / python] 정수를 나선형으로 배치하기 (0) | 2026.06.17 |
| [programmers / python] 주사위 게임 3 (0) | 2026.06.16 |