본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/ALGORITHM

[내일배움캠프] 데일리 루틴(iOS_3회차) - 하샤드 수

이미지를 클릭하면 코딩테스트 페이지로 이동합니다

 

내 풀이

func solution(_ x:Int) -> Bool {
    var sum = 0
    for i in String(x) {
        sum += Int(String(i))!
    }
    return (x % sum == 0)
}

 

해당 문제는 주어진 자연수가 하샤드 수인지 아닌지를 판별하는 함수를 구하는 것이다.

 

* 하샤드 수: 주어진 수의 각 자릿수의 합으로 나누어 떨어지는 수

 

  1. 주어진 정수 x를 문자열로 변환하여 각 자릿수를 추출
  2. 각 자릿수를 정수로 변환하여 합계를 계산
  3. 주어진 수 x를 자릿수의 합으로 나눈 나머지가 0인지를 확인하여, 하샤드 수인지 아닌지를 판별
  4. 결과를 부울 값으로 반환

이 코드의 장점은 각 자릿수를 쉽게 추출하여 합계를 계산할 수 있다는 점이다. 그러나 문자열로 변환하는 과정과 반복문을 통해 각 자릿수를 변환하는 과정에서 성능 저하가 발생할 수 있으며, 또한 입력이 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 반복문은 조건이 참인지 여부를 평가한 후에 코드를 실행하기 때문에, 조건이 항상 참으로 평가되는 경우 무한 반복에 빠질 수 있다. 이러한 상황을 피하기 위해 조건을 적절하게 설정해야 한다.

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31