츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 4388번 받아올림 파이썬(Python)
1) 문제번호 : 4388번
2) 문제 출처
https://www.acmicpc.net/problem/4388
4388번: 받아올림
어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다. 받아올림이
www.acmicpc.net
2. 문제
어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다.
받아올림이란 영어로는 carry라고 하며, 한 자리를 더했을 때, 두 자리라면, 1을 왼쪽 자리로 올려주는 것을 뜻한다.
두 수가 주어졌을 때, 이러한 받아올림이 몇 번 발생하는지 구하는 프로그램을 작성하시오.
3. 제약사항
4. 입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10자리 이내의 양의 정수 또는 0이 주어진다. 입력의 마지막 줄에는 0 0이 있다.
5. 출력
각 테스트 케이스에 대해서, 입력으로 주어진 두 수를 더할때 나오는 받아올림의 개수를 출력한다.
6. 풀이
- 2개의 수에서 최대 자릿수를 탐색한다. 그래서, 그 차이 만큼 자릿수가 적은 수 앞에 0을 넣어서 자릿수를 똑같이 맞춰준다.
- 자릿수를 다 맞춰줬으면, 인덱스를 맨 뒤부터 계산을 하는데, carry 까지 같이 더해준다.
- 덧셈의 받아올림은 최대 1만 있기 때문에, 더한 값을 String으로 변환하여 그 길이에서 -1을 빼주면 된다.
7. 소스 코드
import sys
input = sys.stdin.readline
while True :
A, B = map(int, input().split())
if A == 0 and B == 0 : break
tA = str(A)
tB = str(B)
#최대 자릿수 탐색
tSize = max(len(tA), len(tB)) - min(len(tA), len(tB))
최대 자릿수만큼 반복해서 앞에 0 넣기
for _ in range(tSize) :
if len(tA) > len(tB) :
tB = '0' + tB
if len(tA) < len(tB) :
tA = '0' + tA
carry = 0
cnt = 0
for i in range(len(tA)-1, -1, -1) :
carry = len(str(int(tA[i]) + int(tB[i]) + carry)) - 1
if carry == 1 : cnt+= 1
print(cnt)
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 23794번 골뱅이 찍기 - 정사각형 파이썬(Python) (0) | 2022.01.09 |
---|---|
[백준 알고리즘] 백준 23972번 악마의 제안 파이썬(Python) (0) | 2022.01.09 |
[백준 알고리즘] 백준 14909번 양수 개수 세기 파이썬(Python) (0) | 2022.01.08 |
[백준 알고리즘] 백준 5523번 경기 결과 파이썬(Python) (0) | 2022.01.07 |
[백준 알고리즘] 백준 23825번 SASA 모형을 만들어보자 파이썬(Python) (0) | 2022.01.06 |
[백준 알고리즘] 백준 2721번 삼각수의 합 파이썬(Python) (0) | 2022.01.05 |
[백준 알고리즘] 백준 18766번 카드 바꿔치기 파이썬(Python) (0) | 2022.01.04 |
[백준 알고리즘] 백준 2738번 행렬 덧셈 파이썬(Python) (1) | 2022.01.04 |
최근댓글