내 풀이
func solution(_ x:Int) -> Bool {
var sum = 0
for i in String(x) {
sum += Int(String(i))!
}
return (x % sum == 0)
}
해당 문제는 주어진 자연수가 하샤드 수인지 아닌지를 판별하는 함수를 구하는 것이다.
* 하샤드 수: 주어진 수의 각 자릿수의 합으로 나누어 떨어지는 수
- 주어진 정수 x를 문자열로 변환하여 각 자릿수를 추출
- 각 자릿수를 정수로 변환하여 합계를 계산
- 주어진 수 x를 자릿수의 합으로 나눈 나머지가 0인지를 확인하여, 하샤드 수인지 아닌지를 판별
- 결과를 부울 값으로 반환
이 코드의 장점은 각 자릿수를 쉽게 추출하여 합계를 계산할 수 있다는 점이다. 그러나 문자열로 변환하는 과정과 반복문을 통해 각 자릿수를 변환하는 과정에서 성능 저하가 발생할 수 있으며, 또한 입력이 0인 경우에 대한 예외 처리가 필요하다.
더 간결한 코드를 위해 고민해 봤을 때,
func solution(_ x: Int) -> Bool {
var sum = 0
var num = x
while num > 0 {
sum += num % 10 // 일의 자리 숫자를 plus
num /= 10 // 다음 자릿수로 이동
}
return x % sum == 0
}
1. 함수 내에서 sum과 num이라는 두 개의 변수를 선언
sum은 입력된 수의 각 자릿수의 합을 저장
num은 현재 처리 중인 수를 나타내며, 초기에 입력된 수 x로 설정
2. while 루프를 사용하여 num이 0보다 클 때까지 반복
num이 0이 되면 모든 자릿수를 처리했음을 의미
3. 루프 내에서는 num을 10으로 나눈 나머지를 구하여 일의 자리 숫자를 얻음
이 숫자를 sum에 더한 후 num을 10으로 나누어 다음 자릿수로 이동
4. 모든 자릿수를 처리한 후, 입력된 수의 각 자릿수의 합이 sum에 저장
5. 마지막으로 입력된 수 x를 sum으로 나누어 나머지를 확인
나머지가 0이면 입력된 수의 각 자릿수의 합으로 나누어 떨어지므로 true를 반환하고, 그렇지 않으면 false를 반환
이 코드는 문자열이나 배열을 사용하지 않고도 입력된 수의 각 자릿수의 합을 효율적으로 계산하여 하샤드 수를 확인할 수 있다.
하샤드 수란?
- 자연수의 각 자릿수의 합으로 나누어 떨어지는 수
- 하샤드 수는 자릿수의 합으로 나누어 떨어지는 성질을 가지고 있어 해당 수의 속성을 확인하고 판단할 때 사용
- 18의 경우 각 자릿수의 합은 1 + 8 = 9이며, 18은 9로 나누어 떨어지므로 하샤드 수
21의 경우에도 각 자릿수의 합은 2 + 1 = 3이며, 21은 3으로 나누어 떨어지므로 하샤드 수
while이란?
while 조건 {
// 조건이 참일 때 실행되는 코드
}
- 참 또는 거짓을 판단할 수 있는 표현식.
- 조건이 참이면 반복문의 코드 블록이 실행.
- 반복문이 실행된 후에는 다시 조건을 확인하고, 조건이 여전히 참이면 코드 블록이 다시 실행.
이러한 과정은 조건이 거짓이 될 때까지 반복.
while 반복문은 조건이 참인지 여부를 평가한 후에 코드를 실행하기 때문에, 조건이 항상 참으로 평가되는 경우 무한 반복에 빠질 수 있다. 이러한 상황을 피하기 위해 조건을 적절하게 설정해야 한다.
' 𝗔𝗣𝗣𝗟𝗘 > ALGORITHM' 카테고리의 다른 글
[내일배움캠프] 데일리 루틴(iOS_3회차) - 콜라츠 추측 (0) | 2024.02.07 |
---|---|
[내일배움캠프] 데일리 루틴(iOS_3회차) - 두 정수 사이의 합 (0) | 2024.02.07 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - 정수 내림차순으로 배치하기 (0) | 2024.02.06 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - 정수 제곱근 판별 (0) | 2024.02.02 |
[내일배움캠프] 데일리 루틴(iOS_3회차) - 문자열을 정수로 바꾸기 (0) | 2024.02.01 |