본문 바로가기
알고리즘/프로그래머스

[프로그래머스] 하샤드 수 - 파이썬

by 며루치꽃 2020. 12. 28.

1. 문제

programmers.co.kr/learn/courses/30/lessons/12947

 

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

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

programmers.co.kr

2. 내가 생각했던 풀이과정

처음에 입출력 예시만 보고 리스트로 입력받아야한다고 생각하여 리스트 기준으로 코드를 짰는데, 계속 오답처리를 하여 자세히 보니 입출력이 배열이 아닌 정수를 받아야하는 것이었다,, 일단 내가 리스트 기준으로 생각한 풀이는 아래와 같다. 

 

1) input을 받는다

2) input 길이를 재서 input이 리스트이니 리스트 길이만큼 slice를 이용하여 자른다

3) 자른 것을 int로 변환하여 temp에 넣어준다

4) 마찬가지로 input을 리스트로 받았으니, 형변환을 해준다음에 형변환 해준 number를 temp로 나눈 나머지가 0일 경우 True를 리턴해주고 아닐경우 False 를 리턴하게 해주었다.


계속, 오류가 나서 잘 살펴보았는데, 정수 기준으로 짜야되서 코드를 변경해주었다

 

1) 먼저 입력받은 x를 리스트로 형변환을 해준다

2) 2번 과정은 위에 과정과 같다.

3. 나의 풀이

 

첫번째 풀이

x = input()
    
def solution(x):
    temp = 0
    number = int(x)

    for i in range(len(x)):
        temp += int(x[i])
    
    if number % temp == 0:
        return True    
    else:
        return False

두번째 풀이

def solution(x):
    temp = 0
    number = list(str(x))

    for i in range(len(number)):
        temp += int(number[i])
        if x % temp == 0:
            answer = True    
        else:
            answer = False
    return answer

4. 다른 사람의 풀이

def solution(x):
    return x % sum([int(c) for c in str(x)]) == 0

5. 새로 알게된 점

str(x)의 인덱스 값을 sum() 을 통해 다 더해주고, 나눴을 때 나머지 값이 0인지를 판단하였다

sum 함수() 정의

첫번째 인자 : iterable하고 숫자데이터가 들어간 객체, 변수 

iterable한 자료형을 받으며 numeric 해야합니다. 즉, 리스트나 튜플 처럼 인덱스 순환 접근이 가능한 자료형이고 내부에 숫자로만 이루어져 있어야합니다. 여기서 숫자는 정수, 실수 둘다 가능 합니다. 
두번째 인자 : 처음으로 또 더해줄 숫자

return : iterable의 합 + start 값

 

정리하자면 인자로 들어온 iterable 내부 모든 요소의 합을 구하게 됩니다. 

댓글