일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- bronze3
- 다크모드제한
- naver open api
- fragment에서 context사용
- bronze4
- 뷰클래스
- RETROFIT
- gradle설정
- 백준
- Top-Down
- Alert Dialog
- Android
- silver3
- dp
- recyclerView 클릭이벤트
- 프로그래머스
- LV1
- 녹음기
- LIS
- RecyclerView
- 테마변경
- bottom-up
- Kotlin
- Silver5
- silver4
- bronze2
- toLong()
- map
- 임시저장하기
- stack
- Today
- Total
유니 코드
[BOJ/백준][Bronze II] 2577: 숫자의 개수 (Kotlin) 본문
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함수를 이용하는 것이었다.
이런 방식으로 구현하니 코드가 간결해지고 시간초과도 되지 않았다.
* 이참에 자료구조도 좀 더 공부해봐야겠다..
'알고리즘 > 미분류' 카테고리의 다른 글
[PGS/프로그래머스][Lv1] 콜라츠추측(Kotlin) (0) | 2022.05.08 |
---|---|
[BOJ/백준][Bronze II] 10820: 문자열 분석 (Kotlin) (0) | 2022.03.02 |
[BOJ/백준][Bronze III] 1085: 직사각형에서 탈출 (Kotlin) (0) | 2022.02.24 |
[BOJ/백준][Bronze III] 5086: 배수와 약수 (Kotlin) (0) | 2022.02.21 |