[백준/Python] 4673번 : 셀프 넘버
문제
https://www.acmicpc.net/problem/4673
- 10000 이하의 셀프넘버인 숫자를 모두 출력하는 문제
풀이
문제에서 설명하는 d(n)을 먼저 구현하였다. n에 대한 d(n) 함수는 n과 각 자리수를 더해주는 함수이다. 이때 특정 숫자를 만드는 d(n)이 없는 경우 그 숫자를 셀프 넘버라고 칭한다.
list의 인덱싱을 활용하여 문제를 풀었다. 특정 숫자가 셀프 넘버인지를 체크하기 위한 ls
배열을 생성해주었고, 초기값으로 모두 True 값을 가진다. 이후 루프문을 돌면서 10,000 이하의 셀프 넘버가 아닌 값을 찾아주고 해당 값을 인덱스로 하여 ls에서의 값을 False로 설정하였다.
이후 출력을 위한 루프문을 돌면서 ls 리스트를 조회하며 값이 True인 경우에만 해당 인덱스를 출력하도록 하였다.
MAX = 10_001
def d(num):
rst = num
temp = str(num)
for c in temp:
rst += int(c)
return rst
ls = [True] * MAX
# find number that is not a self number
for i in range(1, MAX):
rst = d(i)
if rst < MAX:
ls[rst] = False
# print only self number
for i in range(1, MAX):
if ls[i]:
print(i)
후기
과거에 내가 풀었던 코드를 우연히 볼 수 있었다. 약 2년전 풀었던 풀이는 지금과 사뭇 다른 것 같다. (뭔가 문법이 더욱 단순하다고 해야하나..) 코딩이 참 그런 것 같다. 같은 구현을 하더라도 내가 아는 만큼 코드가 달라지는 것 같다. 경험치를 꾸준히 쌓아야할 것 같다.