| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 자바
- Lv2
- 그래프
- dfs
- GIT
- 정렬
- 15686
- 프로그래멋
- Summer/Winter Coding(~2018)
- 완전탐색
- DP
- 이코테
- 백준
- BFS
- 알고리즘고득점Kit
- 조합
- 정수 삼각형
- 알고리즘
- 구현
- 분할정복
- Java
- 깃허브 프로필
- 다익스트라
- 그래프탐색
- 프로그래머스
- 토마토
- 월간 코드 챌린지 시즌1
- Python
- 깃허브
- 1932
Archives
- Today
- Total
갱스터하우스
[Python] Lv1.하샤드 수 본문
https://programmers.co.kr/learn/courses/30/lessons/12947
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
- x는 1 이상, 10000 이하인 정수입니다.
나의 접근 방법 및 풀이
입력받은 숫자를 자릿수마다 나누어서 합을 구하고, 최종적으로 x를 자릿수의 합 sum으로 나누어지는 지에 따라 True와 False를 return 했다.
def solution(x):
sum = 0
t = x
for i in range(len(str(x))-1, -1, -1):
sum += t // (10**i)
t = t%(10**i)
##print(sum)
if x % sum==0:
return True
else:
return False
<다른 풀이>
def solution(n):
# n은 하샤드 수 인가요?
return n % sum([int(i) for i in str(n)]) == 0
내가 풀면서도 자릿수를 일일이 나누고 다시 x값을 나눈 몫으로 저장하면서도 찜찜했는데, 이 코드를 보자마자 왜 찜찜했는지 알 수 있었다. 내가 하면서도 '아 이거 이렇게 안 풀어도 될 것 같은데' 싶었는데....
입력받은 숫자 n을 숫자로 취급하지 않고 str로 변환하여 각 자릿수를 문자열의 요소로 생각하여 리스트에 담고, sum을 이용하여 합계를 구하고, 이걸 n으로 나누었을 때 나머지에 따라 자동으로 True와 False를 return 하게 했다.
for문도 한 줄로 사용하고, if문 없이도 이렇게 표현할 수 있다는 게 너무 좋았다.
'코테 문제 > 프로그래머스' 카테고리의 다른 글
| [Python] Lv1.문자열 다루기 기본 (0) | 2022.04.08 |
|---|---|
| [Python] Lv1.핸드폰 번호 가리기 (0) | 2022.04.08 |
| [Python] Lv1.수박수박수박수박수박수? (0) | 2022.04.07 |
| [Python] Lv1. 콜라츠 추측 (0) | 2022.04.07 |
| [Python] Lv1.서울에서 김서방 찾기 (0) | 2022.04.07 |