초보 개발자의 이야기, 릿허브

[C++] 프로그래머스 하샤드 수 본문

코딩테스트/📘 프로그래머스 (programmers)

[C++] 프로그래머스 하샤드 수

릿99 2021. 8. 14. 15:55
728x90
반응형
1. 문제이해

코딩테스트 연습 - 하샤드 수 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

어떤 숫자 X의 각 자릿수를 모두 더한 합으로 X를 나누었을 때, 나누어떨어지면 그 수를 하샤드 수라고 한다.

양의 정수 X를 입력받아 X가 하샤드 수인지를 확인하는 알고리즘을 구현하는 것이 목표이다.

 

 

 

2. 문제풀이

 

바로 전 포스팅에서 풀었던 자릿수 더하기 문제에서 조건이 조금 추가된 문제이다.

X의 자릿수의 합을 더한 뒤, 해당 수가 자릿수의 합으로 나누어떨어지는지까지 확인해야 한다.

X의 자릿수의 합을 구하는 방법은 이전 포스팅과 동일하게 구현했다.

 

[C++] 프로그래머스 자릿수 더하기 (tistory.com)

 

[C++] 프로그래머스 자릿수 더하기

1. 문제이해 코딩테스트 연습 - 자릿수 더하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 자릿수 더하기 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들

beginnerdeveloper-lit.tistory.com

 

위의 방법으로 정수 X의 각 자릿수의 합을 구한 뒤에는, X가 나누어떨어지는지 아닌지만 판단하면 된다.

주어진 틀은 아래와 같다.

 

 

 

 

3. 소스코드
#include <string>
#include <vector>
using namespace std;

bool solution(int x) {
    bool answer = true;
    int sum = 0;
    // while문을 거치고나면 x값이 바뀌므로, 초기 x값을 따로 저장
    int initial_x = x;	
    
    // 각 자릿수의 합 구하기
    while(x > 0){
        sum += x % 10;
        x = x / 10;
    }
    
    if(initial_x % sum == 0){
        answer = true;
    }
    else
        answer = false;
    
    return answer;
}

while문을 통해 각 자릿수의 합을 구한 뒤, if문을 통해 초기 x값이 자릿수의 합으로 나누어지는지를 확인,

나누어지면 true, 아니면 false를 반환하도록 구현했다.

코드에서 한 가지 주의해야 할 점은 바로 while문을 통과하면 x값이 바뀐다는 점인데,

initial_x라는 값을 두어 초기의 x값을 따로 저장해주어 이를 방지했다.

(만약 initial_x 값을 두지않고, if문에서 x % sum 으로 쓰게된다면,

x값은 이미 while문을 통해 바뀐값이 나오기때문에 초기 x값이 아닌 다른 값이 들어가 제대로 된 결과를 반환하지 않게 된다.)

 

 


프로그래머스 문제가 오늘째로 4문제인데, 백준과 함께 병행하면서 푸는게 나을 것 같다.

프로그래머스는 주어진 틀에 맞춰서 짜야하는 것 때문에 뭔가 답답하달까..😥

그래도 이렇게 주어진 틀에 맞춰서 짜는 연습도 많이 해봐야지..😌

 

728x90
반응형