반응형
https://www.acmicpc.net/problem/1475
[문제]
다솜이는 은진이의 옆집에 새로 이사 왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
첫째 줄에 필요한 세트의 개수를 출력한다.
[입출력 예]
[풀이]
각 숫자의 몇 번 나왔는지를 체크하여 가장 많이 나오는 수의 횟수를 구해주면 됩니다.
단, 여기서 6과 9는 서로 뒤집어서 사용이 가능하므로 짝수 횟수일 경우에 대한 중복 처리에 주의해야 합니다.
fun roomNumber() {
val n = readln()
val count = IntArray(10)
for (ch in n) {
val num = ch.digitToInt()
count[num]++
}
// 6과 9는 합쳐서 사용 가능하므로 6과 9의 빈도를 합침
val sixNineCount = count[6] + count[9]
count[6] = sixNineCount / 2 + sixNineCount % 2
count[9] = 0
// 가장 많이 필요한 숫자의 개수를 반환
println(count.maxOrNull() ?: 0)
}
6과 9는 빈도를 합쳐서 2로 나누어줍니다. 하지만 홀수일 경우를 대비하여 나머지 값 또한 더해주도록 합니다.
반응형