Code KATA/알고리즘 코드카타

[2024.12.22] 하샤드 수

iiblueblue 2024. 12. 23. 10:55

문제 설명

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

 

 

제한사항

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

 

입출력 예

x return 설명
10 true 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
12 true 12의 모든 자릿수의 합은 3입니다. 12은 3로 나누어 떨어지므로 12은 하샤드 수입니다.
11 false 11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11은 하샤드 수가 아닙니다.
13 false 13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

 

 

문제 풀이

풀이 언어 : C++

#include <string>
#include <vector>
#include <cmath>

using namespace std;

bool solution(int x) {
    bool answer = true;
    int dismantleNum;
    int myX=x;
    int xSum=0;
    
    // 해체 하여 합 구하기
    for(int i=to_string(x).size()-1; i>-1; i--)
    {
        dismantleNum=myX/pow(10, i);
        myX-=dismantleNum*pow(10, i);
        xSum+=dismantleNum;
    }
    
    // 나누어 떨어지는지 확인하기
    if(x%xSum==0)   answer=true;
    else    answer=false;
    
    return answer;
}

이전의 문제들과 같이 이것도 정수를 해체하는 것부터 시작한다. 전과 같은 알고리즘으로 정수를 해체하여 합을 구한다.

https://iiblueblue.tistory.com/64

 

[2024.12.14] 자릿수 더하기

문제 설명자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.예를 들면 N=123이면 1+2+3=6을 return 하면 됩니다   제한사항N의 범위 : 100,000,000 이하의 자연

iiblueblue.tistory.com

그리고 마지막만 처리를 조금 추가해주면 된다. x를 xSum으로 나눴을 때 나머지가 0인 경우만 answer을 true로하고 나머지의 경우 false로 하면 나누어떨어지는지 확인할 수 있다.

 

 

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12947

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr