BJ4673_셀프_넘버_python
1. 문제링크
https://www.acmicpc.net/problem/4673
2. 풀이 전 계획과 생각
< 정보 정리 >
1) 입력값: 없음 (1 - 10,000 range)
2) 출력값: range 내의 모든 셀프 넘버
3) 제약조건: 1 <= N <= 10,000
4) 예외케이스: 없음
< 공통 로직 >
- d(ab) = ab + a + b => cd (cd는 셀프 넘버가 아니다)
- 1-10000 수에서 셀프 넘버가 아닌 수들을 빼준다.
3. 풀이
def get_self_number(a, b):
if b < a:
print("b must be greater than a")
return
not_self_num = set()
for i in range(a, b):
not_self_num.add(d(i))
range_num = set(range(a, b))
self_num = range_num - not_self_num
for i in sorted(self_num):
print(i)
def d(n):
a = 0
b = list(str(n))
for i in b:
a += int(i)
return a + n
get_self_number(1, 10000) # 1 3 5 7 9 20 31 42 ...
4. 풀이하면서 막혔던 점과 고민
처음엔 셀프넘버를 모두 찾자는 생각에 빠져 있어서 더 쉬운 셀프넘버가 아닌 수를 활용하는 방법을 간과했다.
5. 풀이 후 알게된 개념과 소감
이 문제에서는 set의 유용성을 배울 수 있었다.
Credits:
Author And Source
이 문제에 관하여(BJ4673_셀프_넘버_python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@area363/BJ4673셀프넘버python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)