반응형
백준 4673번 문제입니다. (solved.ac)기준 실버 5 문제입니다.
https://www.acmicpc.net/problem/4673
문제
문제 접근
d(n)은 n과 n의 각 자리수를 더하는 함수라고 합니다. ex) d(672) => 672 + 6 + 7 + 2 = 687
n을 d(n)의 생성자라고 합니다. d(672)에서는 672은 687의 생성자 입니다.
생성자가 없는 수를 셀프 넘버라고 합니다. 100 이하의 셀프 넘버는 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97와 같이 총 13개가 있습니다.
10000이하의 셀프 넘버를 한 줄에 하나씩 출력하도록 코드를 작성하면 됩니다.
생성자가 있는 수들(셀프 넘버가 아닌 수)를 담을 리스트인 exceptedList라는 mutableList를 만들어주고 1 ~ 10000까지 반복문을 통하여 d(n)을 계산할 수 있도록 구현하였습니다.d(10000)은 10000을 넘기므로 명시적으로 제외하였습니다.
10000보다 작은 수들의 자릿수는 총 4가지 경우가 있습니다. 한 자릿수, 두 자릿수, 세 자릿수, 네 자릿수. 각 자릿수 별로 d(n)을 계산하여 생성자가 있는 수들은 exceptedList에 add해주었고 작업이 끝난 후에는 1 ~ 10000까지 모든 수를 exceptedLisg에 존재하는지 여부를 확인하고 존재하지 않는다면 셀프 넘버라는 뜻이므로 println()을 이용하여 한 줄에 하나씩 출력하도록 하였습니다.
정답 코드
fun main() {
val exceptedList = mutableListOf<Int>()
for (no in 1..10000) {
// 네 자리 수 일경우
if (no / 1000 > 0) {
val thousands = no / 1000
val hundreds = (no % 1000) / 100
val tens = (no % 100) / 10
val unit = (no % 10)
exceptedList.add(no + thousands + hundreds + tens + unit)
} else if (no / 100 > 0) {
val hundreds = no / 100
val tens = (no % 100) / 10
val unit = (no % 10)
exceptedList.add(no + hundreds + tens + unit)
} else if (no / 10 > 0) {
val tens = no / 10
val unit = no % 10
exceptedList.add(no + tens + unit)
} else {
exceptedList.add(no + no)
}
}
for (no in 1..10000) {
if (!(exceptedList.contains(no))) println(no)
}
}
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 18111번 마인크래프트(브루트 포스 / 완전 탐색)[Kotlin - 코틀린] (0) | 2022.05.16 |
---|---|
[백준] 10819 차이를 최대로(브루트 포스)[Kotlin - 코틀린] (0) | 2022.05.16 |
[백준] 2309번 일곱 난쟁이(브루트포스 / 완전 탐색)(코틀린 - Kotlin) (0) | 2022.05.12 |
[백준] 1157번 단어 공부(코틀린 - Kotlin) (0) | 2022.05.10 |
[백준] 1110 더하기 사이클(Kotlin - 코틀린) (0) | 2022.04.27 |
최근댓글