본문 바로가기
코딩 테스트/[JAVA] 백준

[JAVA] 백준 4388번 받아올림 | BOJ 자바 bronze 3

by M개발자 2022. 3. 21.
반응형

받아올림

어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다.

받아올림이란 영어로는 carry라고 하며, 한 자리를 더했을 때, 두 자리라면, 1을 왼쪽 자리로 올려주는 것을 뜻한다.

두 수가 주어졌을 때, 이러한 받아올림이 몇 번 발생하는지 구하는 프로그램을 작성하시오.

 


예제 입출력

 

입력 출력
123 456
555 555
123 594
0 0
0
3
1

 


코드

 

1. 무한 반복 whlie문

테스트 케이스 수가 주어지지 않아 while문을 반복한다.

 

2. 두 수 입력받기

 

3. 두 수의 합이 0이면 무한루프 종료

 

4. 받아올림 구하기 위한 whlie문 반복

1의 자리를 잘라내어 구할 것이므로 잘라내다 보면 어느 한 수가 0이 되게 된다. 그전까지 while문을 반복한다.

int add : 바로 전에 받아올림될 경우 1을 더하기 위한 변수

int cnt : 받아올림 수를 저장할 변수

 

5. 두 수의 1의 자리를 저장하고 두 수에서 1의 자리 잘라내기

1000 % 10 = 0→ 수를 10으로 나누었을 때의 나머지를 통해 1의 자리를 구할 수 있다.

1000 / 10 = 100

→ 수를 10으로 나누면 1의 자리를 제외한 수를 구할 수 있다. 

 

6. 두 수의 1의 자리와 이전에서 받아올렸을 경우를 더했을 때 10을 넘는지 확인하기

두 수의 합과 바로 전에 수가 10을 넘게될 경우 이 자리 또한 받아올림이다. 따라서 세 합이 10을 넘게될 경우 받아올림이다.그래서 세 수의 합이 10을 넘으면, cnt를 1 증가시키고 add를 1로 하여 다음 수의 합에 더할 수 있도록 한다.10을 넘지 않으면 add를 0으로 준다.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            if (a + b == 0) break;
            int cnt = 0;
            int add = 0;
            while (a != 0 || b != 0) {
                int aM = a % 10;
                int bM = b % 10;
                a /= 10;
                b /= 10;
                if (aM + bM + add >= 10) {
                    cnt++;
                    add = 1;
                } else add = 0;
            }
            System.out.println(cnt);
        }
    }
}

 

 

4388번: 받아올림

어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다. 받아올림이

www.acmicpc.net

 

반응형

댓글