티스토리 뷰
https://www.acmicpc.net/problem/4673
4673번: 셀프 넘버
셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때,
www.acmicpc.net
First Try 🎉
def separator(x):
"""_summary_
Args:
x (int): 각 자리수를 따로 계산하고 싶은 integer
Returns:
int : 각 자리수를 합한 integer
"""
a = x//1000 # x의 천의 자리 수
b = (x - a*1000) // 100 # x의 백의 자리 수
c = (x - a*1000 - b*100) // 10 # x의 십의 자리 수
d = x % 10 # x의 일의 자리 수
return a+b+c+d # 각 자리 수의 합
origin = set(list(range(1,10001))) # 1에서 10000 사이의 모든 정수
# 전체 origin에서 집합의 차의 연산과 여집합을 이용하여
# 생성자가 없는 셀프 넘버만 추출해낼 것이다.
ops = []
for n in range(1, 10000):
ops.append(separator(n)+n) # separator로 각 자리 수를 합하고, 해당 수를 더하여 d(n)을 계산한다.
ops = set(ops)
result = sorted(list(origin - ops)) #셀프 넘버를 구한다.
for n in result:
print(n)
맞췄지만 맞춘 것 같지 않다. 비효율적인 방법이지만 떄론 무식한 방법이 성공할 때도 있다는 생각으로 접근했다. 특별히 규칙을 찾기 힘들었다.
'Programming > python' 카테고리의 다른 글
[Daily 코테] 백준 2751번: 수 정렬하기 2 (0) | 2023.09.22 |
---|---|
[Daily 코테] 백준 1316번: 그룹 단어 체커 (0) | 2023.09.19 |
[Daily 코테] 백준 1181번: 단어 정렬 (0) | 2023.09.15 |
[Daily 코테] 백준 1094번: 막대기 (0) | 2023.09.13 |
[Daily 코테] 백준 1010번: 다리 놓기 (0) | 2023.09.12 |