본문 바로가기
공부/코딩테스트

프로그래머스/C# - 하샤드 수

by 잰쟁 2024. 5. 31.
728x90

 

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

 

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.

 

입출력 예

 

입출력 예 설명

 

입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

 

 

 

풀이

using System;
public class Solution {
    public bool solution(int x) {
        string a = x.ToString();
        int b= 0;
        for(int i =0 ;i<a.Length;i++){
            b += Convert.ToInt32(a[i].ToString()); 
        }
        bool answer;
        answer = (x % b == 0) ? true : false;
        return answer;
    }
}

 

: 저번에 풀었던 문제랑 비슷한 유형같아서 지난번 방식이랑 비슷하게 풀었다.

int x를 각 자릿수로 분해하기 위해 ToString() 함수를 사용하여 string 형식으로 만들어준 다음,

for문을 돌며 string의 배열의 순서대로 더해준다.

x를 나눠줄 int 형식의 b도 정의해준다.

여기서 string을 배열로 변환할 경우 char 형식으로 변하기 때문에 배열값을 string으로 다시 변환한 후 int로 변환해준다.

삼항연산자를 이용해 x를 b로 나눈 나머지가 0이면 (나누어 떨어지면) true를, 그게 아니면 false를 반환해준다.

 


 

다른 사람 풀이)

public class Solution {
         public  bool solution(int x)
        {
            int tmp = x;
            int value = 0;
            bool answer = false;
            while (tmp > 0)
            {
                value += tmp % 10;
                tmp = tmp / 10;
            }

            if (x % value == 0)
                answer = true;

            return answer;
        }
}

 

: x가 0보다 클 때까지

x를 10으로 나눈 나머지를 value에 더해주고, x를 10으로 나눠주고 다시 그 몫을 10으로 나눈 나머지를 value에 더하는 작업을 반복한다.

작업이 끝나면 x를 나머지들을 더한 value로 나눈 나머지가 0일때만(나누어 떨어질 때만) true를 반환하고 그 외는 false를 반환한다.