[백준] 받아올림 (4388)(kotlin)

문제 설명

백준 4388번 문제 링크

입력 및 출력

» 입력

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10자리 이내의 양의 정수 또는 0이 주어진다. 입력의 마지막 줄에는 0 0이 있다.

» 출력

각 테스트 케이스에 대해서, 입력으로 주어진 두 수를 더할때 나오는 받아올림의 개수를 출력한다.

예제 입출력(테스트케이스)

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

문제 풀이1

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))) {
    while (true) {
        var (a, b) = readLine().split(" ").map { it.reversed() }
        //두 String a("1")와 b("123456"를 revered로 받음
        //ex) "1" "123456" -> "1" "654321"
        if (a == "0" && b == "0") break
        //입력으로 "0" "0"이 들어오면 종료

        when {
            a > b -> {
                b += "0".repeat(a.length - b.length)
            }
            b > a -> {
                a += "0".repeat(b.length - a.length)
            }
        }
        //a(String)과 b(String)중 긴 length를 가진 것에 맞추어 짧은 String에 오른쪽으로 0을 채움(추가)
        //ex) "1" "654321" -> "100000" "654321"

        var carryCount = 0
        //carry가 몇 번 일어나는지 카운트할 변수 초기화
        var carry = false
        //carry가 발생했을 경우 사용할 flag

        for (i in a.indices) {
            //정상적인 덧셈 계산에서는 가장 작은 수인 제일 오른쪽부터 덧셈을 하지만
            //위 a, b입력에서 reversed로 받았으므로 가장 왼쪽부터 계산시작

           if (carry) {
                //이전 연산에서 carry가 발생하였을 경우
                if (1 + a[i].toInt() + b[i].toInt() - 96 > 9) {
                    //두 수(0~9의 범위를 가지는)의 덧셈에서 발생할 수 있는 최대 carry는 1이므로
                    //1(carry) + 두 수(a[i] + b[i]_를 더해 9를 초과하는지 확인하고
                    //초과한 경우 carry를 유지(carry 상태 변화없음)
                    carryCount++
                    //carryCount에 1을 올림
                } else {
                    //1(carry) + 두 수(a[i] + b[i]_를 더해 9 미만일 경우
                    //carry를 false로 바꿈
                    carry = false
                }
            } else {
                //이전 연산에서 carry가 발생하지 않은 경우
                if (a[i].toInt() + b[i].toInt() - 96 > 9) {
                    //두 수(a[i] + b[i])를 더한 값이 9를 초과한 경우
                    carry = true
                    //carry를 true로 바꿈
                    carryCount++
                    //carry가 생겼으므로 carryCount에 1을 올림
                }
            }
        }

        println(carryCount)
        //carryCount를 출력
    }
}