[C++] 프로그래머스 하샤드 수
2020. 12. 10.
반응형

programmers.co.kr/learn/courses/30/lessons/12947

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr

 

1. 서론

 

간단하게 풀 수 있는 level 1 문제이다.

 

2. 문제 풀이

 

양의 정수가 있다. 그 정수의 각 자릿수를 더한 값을 원래 정수 값과 나눴을 때 딱 떨어지면 그걸 하샤드 수라고 한다.

하샤드 수인 경우에는 true를, 아닌 경우에는 false를 return 하는 함수이다.

 

예를 들어 정수가 18일 경우,

1 + 8 = 9 => 18 / 9 = 2 ... 0 => true

 

정수를 각 자릿수로 단위로 나눌 경우 나머지를 활용하는 게 쉬워서 그렇게 풀었다.

정수에 10의 나머지 값을 계속 저장하고 원래의 정수는 10으로 나누는 것이다.

 

3. 코드 설명

 

#include <string>
#include <vector>

using namespace std;

bool solution(int x) {
    bool answer = true;
    int n = x, c = 0;
    
    while (1)
    {
        c += n % 10;
        n /= 10;
        if (n == 0) break;
    }
    
    if (x % c != 0)
        answer = false;
      
    return answer;
}

 

n은 각 자릿수를 계산하기 위한 수, c는 각 자릿수를 다 더한 값이다. 

n을 10으로 나눴을 때 나머지 값을 c에 저장하고 n은 10으로 나눠준다. 그럼 각 자릿수를 저장할 수 있다.

그리고 n이 0이 됐을 때는 각 자릿수의 저장이 끝난 경우이므로 반복문을 멈춘다.

그리고 원래 정수인 x와 c를 비교해 값을 return 해준다.

 

 

 

 

 

 

 

 

 

반응형
myoskin