본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

Programmers Lv1. "하샤드 수"

Programmers Lv1. 하샤드 수, 연습문제, 정답률 86%

비교적 자주 사용되는 기본적인 스킬이 이 문제에 하나 녹아있다고 생각한다.
그에 대한 내용은 밑에서 차차 알아보기로 하자.

이 문제도 어렵지 않다. Programmers Lv.1"하샤드 수" 시작해보자.
문제분석부터 해보자.
1. 양의 정수 x가 입력값으로 주어지고 범위는 1~10000이하이다.
2. 하샤드 수의 여부를 판별하여 True/False를 출력한다.

쉽게 이야기해서 하샤드 수에 대한 개념이 있어야 하는데 이를 문제에서 설명해준다.
하샤드 수는 무엇일까?
어떠한 양의 정수 x에 대하여 x의 각 자릿수의 합을 M이라 했을 때 x가 M으로 나누어 떨어지면 하샤드 수이다.

핵심 알고리즘을 구현해보자.
1. M을 구한다.
  1-1. x를 각 자릿수로 나눈다.
  1-2. 각 자릿수를 더하여 M을 만든다.
2. x가 M으로 나누어 떨어지는지 확인한다. (= 하샤드 수인지 확인한다.)
  2-1. 하샤드 수이면 True를 출력한다.
  2-2. 하샤드 수가 아니면 False를 출력한다.

이를 코드로 옮기면 다음과 같다.

solution.py

처음에 언급했던 기본적인 스킬에 대하여 짧게 언급해보겠다.
필자가 말하고 싶은 내용은 바로 숫자의 각 자릿수를 분리하기 위한 작은기술이다.
(뭐, 기술이랄것도 없지만,,ㅎㅎ)

Pythoniterable 객체라는 것이 있다.
반복이 가능한 객체를 의미하는 것인데 대표적으로 list, dict, set, str, bytes, tuple, range이 해당한다.
즉, 이들은 값을 차례대로 꺼낼 수 있다. 이것과 List Comprehension을 이용한 사소한 기법을 소개하겠다.

# iterable 객체와 list comprehension을 이용
res = [ int(i) for i in str(number) ]

# EX 01
number = 1329
res = [ int(i) for i in str(number) ]
print(res)
# 출력값 : [1, 3, 2, 9]

정말 사소하고 사실 기법이라 불릴것도 없는 내용이다.
그저 효율적으로 쓰기위해 알아두면 좋은내용정도?ㅎㅎ