1. 문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
- 제한 조건
- x는 1 이상, 10000 이하인 정수입니다.
2. 풀이 코드
#include <string>
#include <vector>
using namespace std;
bool solution(int x) {
bool answer = true;
int sum = 0;
for(int temp = x; temp > 0; temp/=10)
{
sum += temp % 10;
}
return x % sum == 0 ? true : false;
}
3. 정리
10과 나머지 연산 후 결과는 항상 1의 자릿수의 값이다. 그리고 10과 나누기 연산 후 결과는 해당 수의 자릿수가 감소한다. 이 점을 이용하여 자릿수의 총합(sum)을 구한 후 x와 하샤드 수인지 아닌지를 판별한다.
전체 시간 복잡도는 for문이 자릿수( log10(x) + 1 )만큼 반복하므로 O(log x) 이다.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12947
'Algorithm' 카테고리의 다른 글
| [프로그래머스] 서울에서 김서방 찾기 (0) | 2025.03.07 |
|---|---|
| [프로그래머스] 음양 더하기 (0) | 2025.03.07 |
| [프로그래머스] 정수 제곱근 판별 (0) | 2025.03.07 |
| 백트래킹(Backtracking) (0) | 2021.05.06 |
| 구현 (0) | 2021.04.27 |