728x90
https://www.acmicpc.net/problem/10610
문제 풀이
1. 주어진 숫자를 30의 배수 중 가장 큰 수가 되게 하기 위해서 다음과 같은 조건을 찾는다.
2. 30의 배수는 3의 배수와 10의 배수의 최소 공배수이다.
3. 따라서 주어진 숫자는 10의 배수가 되면서 3의 배수도 되어야 한다.
4. 주어진 숫자를 내림 차순으로 정렬한다.
5. 10으로 나누어 떨어지지 않으면 -1을 출력한다.
6. 첫자리 부터 마지막 자리까지 더한 합을 3으로 나누었을 때 나누어 떨어지지 않으면 -1을 출력한다.
7. 나누어 떨어지면 더한 합을 출력한다.
코드
import java.io.*
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val N = br.readLine()
if (N.contains("0")) {
val number = N.toCharArray()
number.sortDescending()
if (number[number.size - 1].digitToInt() != 0) {
println(-1)
} else {
var sum = 0
for (i in 0 until number.size - 1) {
sum += number[i].digitToInt()
}
if (sum % 3 == 0) println(String(number))
else println(-1)
}
} else {
println(-1)
}
}
728x90
'알고리즘(w.KOTLIN) > 그리디(Greedy)' 카테고리의 다른 글
[백준][코틀린][12970] AB (0) | 2023.06.04 |
---|---|
[백준][코틀린][1783] 병든 나이트 (0) | 2023.05.29 |
[백준][코틀린][2875] 대회 or 인턴 (0) | 2023.05.18 |
[백준][코틀린][1744] 수 묶기 (0) | 2023.05.15 |
[백준][코틀린][1541] 잃어버린 괄호 (0) | 2023.05.11 |