Notice
Recent Posts
Recent Comments
Link
archive
[백준] 셀프 넘버 (Python) 본문
✏️ 문제
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
✏️ 풀이
- 1차시도
1부터 10001 까지에 대해 해당 자연수가 1부터 10000까지의 자연수 중 하나를 생성자로 가지는 지 판별하였다.
결과 : 시간 초과(O(n^2))
for num in range(1,10001):
for i in range(1,10000):
if i > num:
continue
if num == i + sum(list(map(int, list(str(i))))):
break
else:
print(num)
- 성공
1부터 10000까지의 자연수를 생성자로 가지는 셀프넘버를 미리 모두 구하여 배열에 저장한다.
그 후, 1부터 10001까지에 대해 셀프넘버 배열에 속하지 않는 것들을 출력한다.
시간복잡도가 O(n)으로 줄어든다.
✏️ 코드
d = []
for i in range(1,10000):
d.append(i + sum(list(map(int, list(str(i))))))
for i in range(1,10001):
if i not in d:
print(i)
'STUDY > 알고리즘' 카테고리의 다른 글
[백준] A+B - 4 (Python) (0) | 2021.03.01 |
---|---|
[백준] 나머지 (Python) (0) | 2021.03.01 |
[백준] 사탕 게임 (Python) (0) | 2021.03.01 |
[백준] 유레카 이론 (Python) (0) | 2021.03.01 |
[백준] 일곱 난쟁이 (Python) (0) | 2021.03.01 |
Comments