비교적 자주 사용되는 기본적인 스킬이 이 문제에 하나 녹아있다고 생각한다.
그에 대한 내용은 밑에서 차차 알아보기로 하자.
이 문제도 어렵지 않다. 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를 출력한다.
이를 코드로 옮기면 다음과 같다.
처음에 언급했던 기본적인 스킬에 대하여 짧게 언급해보겠다.
필자가 말하고 싶은 내용은 바로 숫자의 각 자릿수를 분리하기 위한 작은기술이다.
(뭐, 기술이랄것도 없지만,,ㅎㅎ)
Python을 iterable 객체라는 것이 있다.
반복이 가능한 객체를 의미하는 것인데 대표적으로 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]
정말 사소하고 사실 기법이라 불릴것도 없는 내용이다.
그저 효율적으로 쓰기위해 알아두면 좋은내용정도?ㅎㅎ
'알고리즘 & 코딩테스트 > 코딩테스트' 카테고리의 다른 글
Programmers Lv1. "제일 작은수 제거하기" (0) | 2022.02.27 |
---|---|
Programmers Lv1. "콜라츠 추측" (0) | 2022.02.01 |
Programmers Lv1. "x만큼 간격이 있는 n개의 숫자" (0) | 2022.01.29 |
Programmers Lv1. "핸드폰 번호 가리기" (0) | 2022.01.29 |
Programmers Lv1. "행렬의 덧셈" (0) | 2022.01.19 |