유니 코드

[BOJ/백준][Bronze II] 2577: 숫자의 개수 (Kotlin) 본문

알고리즘/미분류

[BOJ/백준][Bronze II] 2577: 숫자의 개수 (Kotlin)

꼬물쥰 2022. 2. 25. 23:48

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

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

문제

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.


입력

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.


출력

첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.


예제 입력1

150
266
427

예제 출력1

3
1
0
2
0
0
0
2
0
0

풀이

import java.util.*

fun main(args: Array<String>){
    val sc: Scanner = Scanner(System.`in`)
    var value = 1
    var result = ArrayList<Int>()
    
    for(i in 0..2){
        value *= sc.nextInt()
    }
    
    while(value > 0){
        result.add(value % 10)
        value = value / 10
    }
    
    for(i in 0..9){
        println(result.count(){it == i})
    }   
}

처음엔 배열의 크기가 10인 배열을 생성하고 A * B * C를 10으로 나눈 나머지를 인덱스로 하여 값을 증가시켰다.

이렇게 구현하고 제출했더니 시간초과였다,, 사실 구현하면서 코드도 길어지고 복잡해서 안될것 같다고 생각하긴 했다.

그리고 다음에 생각해본 건 곱한 값의 자리 수 하나하나를 배열에 넣고 count함수를 이용하는 것이었다.

이런 방식으로 구현하니 코드가 간결해지고 시간초과도 되지 않았다.

 

* 이참에 자료구조도 좀 더 공부해봐야겠다..

 

Comments