archive

[백준] 셀프 넘버 (Python) 본문

STUDY/알고리즘

[백준] 셀프 넘버 (Python)

seonyounggg 2021. 3. 1. 18:30

✏️ 문제

 

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