안녕하세요. 이번에는 프로그래머스 하샤드 수를 풀어보려고 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12947
Problem
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해 주세요.
[제한 사항]
○ x는 1 이상, 10000 이하인 정수입니다.
Solution
class Solution {
fun solution(x: Int): Boolean {
var answer = true
var num = x
var sum: Int = 0
while(num > 0) {
sum += num % 10
num = num / 10
}
return (x % sum == 0)
}
}
이번 문제는 while문을 사용해서 모든 자릿수의 합을 sum에 합하고 마지막으로 원래 값 x에 모든 자릿수의 합을 나누는 방식으로 문제를 접근하였다.
1. 다른 사람 코드
class Solution {
fun solution(x: Int): Boolean {
return x % x.toString().fold(0){acc, c -> acc + c.toInt() - 48} == 0
}
}
다른 사람은 fold() 함수를 사용해서 문제에 접근한 방법이 있었다. fold 함수는 코틀린에서 컬렉션에 있는 요소를 누적해서 더하여 반환하는 함수이다. 나중에 따로 fold() 함수를 포스팅해봐야겠다.
Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 콜라츠 추측 Kotlin (0) | 2023.11.16 |
---|---|
[프로그래머스] 두 정수 사이의 합 Kotlin (0) | 2023.11.15 |
[프로그래머스] 정수 내림차순으로 배치하기 Kotlin (2) | 2023.11.13 |
[프로그래머스] 문자열을 정수로 바꾸기 Kotlin (2) | 2023.11.12 |
[프로그래머스] 자릿수 더하기 Kotlin (4) | 2023.11.11 |