코딩 테스트/[JAVA] 백준

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

M개발자 2022. 3. 21. 22:14
반응형

받아올림

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

받아올림이란 영어로는 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

 

반응형