받아올림
어린이에게 여러자리 숫자의 덧셈을 가르칠 때는 오른쪽 자리부터 왼쪽으로 하나씩 계산하는 방법을 가르쳐준다. 이때, 받아올림이 발생하게 되며 아이들은 여기서 혼란에 빠진다.
받아올림이란 영어로는 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);
}
}
}
'코딩 테스트 > [JAVA] 백준' 카테고리의 다른 글
[JAVA] 백준 5613번 계산기 프로그램 | BOJ 자바 bronze 3 (0) | 2022.03.22 |
---|---|
[JAVA] 백준 5354번 J박스 | BOJ 자바 bronze 3 (0) | 2022.03.22 |
[JAVA] 백준 2783번 삼각 김밥 | BOJ 자바 bronze 3 (0) | 2022.03.18 |
[JAVA] 백준 2754번 학점계산 | BOJ 백준 bronze 3 (0) | 2022.03.18 |
[JAVA] 백준 2547번 사탕 선생 고창영 | BOJ 자바 (0) | 2022.03.18 |
댓글