본문 바로가기
source-code/Algorithm

프로그래머스 _ 하샤드 수

by mattew4483 2021. 2. 15.
728x90
반응형

프로그래머스 _ 하샤드 수

programmers.co.kr/learn/courses/30/lessons/12947?language=python3

 

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

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

programmers.co.kr


제일 처음 든 생각 → 각 자릿수를 쪼개야겠다! → split 메서드를 쓰자!

 

바로 마주한 난관. split은 문자열을 구분자를 기준으로 쪼개주는 녀석이다.

우리가 입력받는 x는 숫자. 

따라서 일단 요 녀석을 문자열로 바꾼 후 split을 쓰면 될 것 같다.

신나게 치고 print를 했더니...

출력 값을 보면 문제점이 들어난다.

1) list에 담겨버린다.

2) 구분자를 지정할 수가 없다! 

 

따라서 이 방법은 포기.

 

두 번째로... 문자열로 변환했다면, for문을 통해 각 요소들을 가져올 수 있지 않을까?

이런 식으로! 

이러면 x = 13일 경우, for문을 돌며 i =1, 3 이 들어갈 테다!

와우! 성공적으로 각 자릿수가 분리되었다!

그럼 이제 이 녀석들을 다시 숫자로 변환한 후, 몽땅 더해주면 그만이다!

 

나는 a라는 빈 list에 담아 sum함수로 한 번에 더해주는 방식을 선택.

이제 각 자릿수의 합이 구해졌다. 남은 일은 간단.

 

주어진 x에 각 자릿수를 더한 숫자인 plus를 나눠주면 그만이다!

나누어 떨어지면 True, 아니면 False.

 

2점 획득!


다른 사람의 풀이. 얼핏 보기에는 참말로 희한하다.

(길이가 짧을수록 사람들은 열광한다!)

 

우선 이를 통해 int_c = int(c)와 같은 번거로운 짓을 하지 않았다!

그냥 for문 앞에 int(c)라고 적어줌으로써 for문을 돈 c들을 몽땅 숫자로 변환!

 

얘네를 list에 담아 sum을 써줘서 각 자릿수의 합이 구해진다.

 

대망의 특이한 부분.

 

주어진 n을 각 자릿수를 더한 숫자로 나눠 나머지가 0인지 판별했다.

근데 이걸 이대로 return에 적었다! 어떻게? 왜??

 

==0 이니까!!!!!

 

하찮게 봤던 == 는 사실 논리 연산자!

따라서 일치하면 True를, 다르면 False를 반환한다...! 와우!

728x90
반응형