본문 바로가기
스터디(beakjoon)

Kotlin] 백준 2588번 문제 풀이

by 김마리님 2023. 4. 4.

https://www.acmicpc.net/problem/2588

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

 

풀이

더보기

이 문제도.. 별로 어렵진 않은데

뭣보다 이 문제의 경우는 자리에 따른 수를 떼야한다는게 그나마 문제일거 같은데..

 

근데 이것도 별로 어렵지 않은데, 특히 1의 자리수부터 점진적으로 커지는건 더 쉬움..

 

a값과 b값을 받음 ->

루프 생성 ->

b를 10으로 나누어서 나머지를 구함(이게 자릿수) ->

이걸 a와 곱해서 프린트 함 ->

b를 10를 나누어서 몫을 구한다(이게 다음 루프를 돌아서 반복함 ->

최종 값이 0 이하가 나오면 루프 종료

 

예시로 385를 b로 받았다 가정해보자.

385%10 하면 나머지가 5가 되는데, 이게 일의 자리수이다.

해당 자릿수로의 연산이 끝나면 385/10을 하면 38이 나온다.

이 38로 두 번째 루프를 돌린다.

38%10 하면 나머지가 8이 나오는데, 이게 십의 자리수이다.

해당 자릿수로의 연산이 끝나면 38/10을 하면 3이 나온다.

이 3으로 세 번째 루프를 돌린다.

3%10하면 나머지가 3이 나오는데, 이게 백의 자리수이다.

해당 자릿수로 연산이 끝나면 3/10을 하면 0이 나온다.

이 0으로 네 번째 루프를 돌린다.

이 값은 0 이하가 되므로 루프를 종료한다.

 

이를 코드로 나타내면, 

(아, bClone을 해둔 이유는 마지막에 원값의 계산이 필요한데 루프에서 직접적으로 b값을 수정하므로 초기의 b값을 수정하기 위한 용도)

import java.util.*

fun main(args: Array<String>) {
    question2588()
}

fun question2588() {
    val sc: Scanner = Scanner(System.`in`)
    var a = sc.nextInt()
    var b = sc.nextInt()

    var bClone = b

    while (b > 0) {
        println(a * (b % 10))
        b /= 10
    }

    println(a*bClone)

}

 

반응형