4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
def d_n():
non_self = []
for i in range(10000) :
if len(str(i)) == 1:
a = i + i
non_self.append(a)
elif len(str(i)) == 2:
b = str(i)
a = i + int(b[0]) + int(b[1])
non_self.append(a)
elif len(str(i)) == 3:
b = str(i)
a = i + int(b[0]) + int(b[1]) + int(b[2])
non_self.append(a)
else:
b = str(i)
a = i + int(b[0]) + int(b[1]) + int(b[2]) + int(b[3])
if len(str(a)) <= 4:
non_self.append(a)
return non_self
non_self_num = d_n()
for j in range(10000):
if j not in non_self_num:
print(j)
1) 입력은 없으므로 10000을 바로 넣었다 (사용자 정의 함수는 후에도 사용할 수 있으므로 권장하는 방법은 아님)
2) int 에서 자릿수를 분리해야 한다 -> str로 변환 후 len으로 자릿수를 읽음
3) 1의 자리, 10의 자리, 100의 자리, 1000의 자리 이상 4개 경우로 나누어야 한다
4) non_self_number가 10000 이상(자릿수 4 이상)일 경우 제외해야한다 -> 4 이하만 append 했음
5) str로 변형 후 indexing을 통해 숫자를 분리하고, 이를 다시 int로 변환해서 i(원래 넘버) 에 더해준다.
6) 리스트 간 비교가 필요하기 때문에 빈 리스트 정의 후 append로 하나씩 넣어야 한다
7) 1부터 10000까지의 리스트에서 non_self_number를 제외하면 셀프 넘버가 나온다
8) 사용자 정의 함수 d_n()을 for문 안에 바로 넣어도 작동은 되지만, 소요 시간이 눈에 띄게 길어지기에 변수에 넣어서 for문을 돌렸다.
'python > 연습문제 풀이' 카테고리의 다른 글
[백준] Python 2558 / 3046 / 2163 / 11021 / 11022 / 10699 / 7287 / 2525 / 2530 (3) | 2023.01.26 |
---|---|
[내가만든문제] 로또 번호 조합하기 (0) | 2022.10.27 |
[백준] python 25304 : 영수증 (0) | 2022.10.24 |
[백준] python 10950 : A+B -3 (0) | 2022.10.24 |
[백준] python 10807 : 개수 세기 (0) | 2022.10.24 |
댓글