발자취

[프로그래머스 Lv.1 / C언어] Day17. 하샤드 수 본문

코딩테스트/Daily Coding (C, C++)

[프로그래머스 Lv.1 / C언어] Day17. 하샤드 수

해린 2024. 6. 3. 01:24

2024. 06. 03 - 코딩테스트 스터디 Day17

 
 

01. 문제 설명

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

02. 제한사항

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

 

03. 입출력 예

x return
10 true
12 true
11 false
13 false

 
 
 

04. 풀이 및 답

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

bool solution(int x) {
    bool answer = true;
    int num = x;
    int sum = 0;
    
    for (int i = 0; num > 0; i++) {
        sum += num % 10;
        num /= 10;
    }
    
    if (x % sum != 0) {
        answer = false;
    }
    
    return answer;
}

우선 x의 값이 변경되지 않고 보존되게 하기 위하여 새로 만든 변수 num에 x의 값을 저장해줬다.

 

num의 값을 10으로 나눈 나머지를 sum에 저장하고, num을 10으로 나눠준다.

이 과정을 num이 0이 되기 전까지 반복해주면, sum에는 x의 자릿수의 합이 저장된다.

 

x값과 sum값을 비교하여 0이 아니면 'false'를, 0이면 default 값인 'true'를 return 해준다.

 

 

오늘도 한 번에 성공했다!
 
 

 



야호