반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


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)

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기