[연습문제] 하샤드 수
2024. 11. 29. 18:00ㆍ입문문제
https://school.programmers.co.kr/learn/courses/30/lessons/12947
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
- x는 1 이상, 10000 이하인 정수입니다.
입출력 예
| x | return |
| 10 | true |
| 12 | true |
| 11 | false |
| 13 | false |
입출력 예 설명
입출력 예 #1
- 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
- 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
- 11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
- 13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
주어진 양의 숫자가 하샤드 수인지 아닌지 판별하는 문제입니다.
하샤드 수인지 판별하기 위해서는 각 자릿수의 합을 더해야 하므로, C언어에서는 반복문을, 파이썬에서는 리스트 컴프리헨션을 사용해 문제를 풀면 될 것 같습니다.
정답 코드를 작성해보겠습니다.
1. C
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
bool solution(int x) {
// 자릿수의 합 sumN
int sumN = 0;
// 반복문을 사용합니다.
for (int nX = x; nX > 0; nX /= 10) {
sumN += (nX % 10);
}
// 하샤드 수인지 아닌지를 반환합니다.
return (x % sumN == 0);
}
2. 파이썬
# solution = lambda x: (x % sum(int(c) for c in str(x)) == 0)
def solution(x):
return (x % sum(int(c) for c in str(x)) == 0)
파이썬은 리스트 컴프리헨션을 통해 람다 함수로의 구현도 가능합니다.
'입문문제' 카테고리의 다른 글
| [연습문제] 행렬의 덧셈 (0) | 2024.12.01 |
|---|---|
| [연습문제] 핸드폰 번호 가리기 (0) | 2024.11.30 |
| [연습문제] 평균 구하기 (0) | 2024.11.27 |
| [연습문제] 콜라츠 추측 (0) | 2024.11.24 |
| [연습문제] 최대공약수와 최소공배수 (0) | 2024.11.22 |