본문 바로가기
*Algorithm/Programmers_Level1

[programmers] 프로그래머스 Level1 하샤드 수(파이썬 Python)

by codinguser 2020. 9. 2.

프로그래머스
(주)그렙

[programmers] 프로그래머스 Level1 하샤드 수

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제
* 소스 코드 및 정리한 내용의 저작권은 글쓴이에게 있습니다.

 

 

 

 

프로그래머스 Level1 하샤드 수


1) 문제

 

프로그래머스 하샤드 수

 

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

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

programmers.co.kr


2) 풀이 과정

 

1. 입력된 x의 자릿수의 합을 우선 더해야 한다.

 

2. 추 후 자릿수의 합 % x의 값이 0이면(나누어 떨어지면) 하샤드 수 이므로 True 값 반환

 

3. 그 외는 False값 반환


3) 코드

 

Solution 1)

 

1
2
3
4
5
6
7
8
9
10
def solution(x):
    sum = 0
    
    for i in range(len(str(x))):
        sum += int(str(x)[i])
                   
    if(x % sum == 0):
        return True
    else:
        return False
cs

 

 

Solution 2)

 

1
2
3
4
5
6
7
8
9
10
def solution(x):
    sum = 0
 
    for i in str(x):
        sum += int(i)
        
    if(x%sum == 0):
        return True
    else:
        return False
cs

4) 정리 노트

 

(1) for i in range():를 고수하다보니, for i in:을 생각 못하는 것 같다. 일단 풀 때는 for i in range():로 풀었지만, 다 풀고 나서 for i in:로 접근을 해봤다.

 

(2) 숫자 18과 문자 18은 다르다 컴퓨터는 그걸 모르지? 그러니 int()인지 str()인지를 사용해줘서 구분

 

일단 내 머릿속 기준이 반복문 for에 대한 접근이 for i in range()로 되어있던 것을

for i in [문자열, 리스트, 튜플]로 추가를 해놔야겠다.

 

하나의 방법보다 여러 방법을 AB테스트하여 조금 더 괜찮은 게 있다면 습득하자.

 

* for i in range()  # 범위이니까 당연히 매개변수 값을 정수로 받아야겠지?

* len() # 길이잖아? 정수로 하면 오류 나오겠지? 문자열의 길이겠지?

 

ㄴ1) 숫자 x vs 문자 x의 출력 결과

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
= 18
for i in range(x):
    print(i)
    
# < 출 력 >
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13
# 14
# 15
# 16
# 17
cs

 

1
2
3
4
5
6
7
8
= 18
 
for i in str(x):
    print(i)
    
# < 출 력 >
# 1
# 8
cs

 

ㄴ2)

 

1
2
3
4
5
= 18
print(len(str(x)))
 
# < 출 력 >
# 2
cs

 

ㄴ3)

 

1
2
3
4
5
6
7
8
9
10
= 18
 
for i in range(len(str(x))):
    sum = int(str(x)[i])
    
    print(sum)
    
# < 출 력 >
# 1
# 8
cs

 

댓글