https://www.acmicpc.net/problem/4673
def sequence():
# 빈 리스트를 우선 만들어, 생성자가 있는 숫자를 담고자 함.
infi = []
# 10,000보다 작거나 같은 수를 돌면서
for n in range(1, 10001):
# 한번 돌고나서 num을 초기화해주기!
num=0
# n을 str로 변환한 뒤 순회하면서
for i in str(n) :
# num에 다시 int로 변환해 숫자를 더해주고
num += int(i)
# 숫자 n 또한 더해줌
num += n
# infi에는 셀프넘버가 아닌 숫자들만 담는다.
infi.append(num)
# 다시 순회하면서
for n in range(1, 10001):
# 생성자가 있는 리스트에 없다면 그 숫자는 셀프넘버이다.
if n not in infi:
print(n)
sequence()
🔑의도치않았지만 특별한 함수없이 풀어보았다.
이렇게 쓰니 코드도 길어지고 큰 수를 for문으로 두번 돌다보니 불필요한 반복으로 인해 시간이 오래걸린다....😓
내 머리로는 이게 최선이었으나 스터디원의 다른 코드를 보니 참 깔끔하고 좋았다...!
🔗출처 : https://codinghani.tistory.com/2
🔎똑똑하신 HE님은 두가지방법으로 푸셨다.
우선 set
을 사용하셨다는 것에 대해 나는 생각도 못했던방법,,, 생성자가 2개 있는 수가 있다고 문제에서 말했지만 나는 별 대수롭지 않게 생각햇지만 HE님은 캐치하심...!
이런거 하나하나가 쉬운 문제일때는 별일 아니지만 어려운 문제일수록 중요할 것 같다!
for
문이 많을 수록 시간적인 면에서 비효율적이니 없애고자 map
함수와 sum
을 활용하신 면에서 따봉드려용,,,👍👍
HE님 코드에 비하니 내 코드는 쪼랩이다,,,시간도 오래걸렸고 코드도 길고 메모리도 많이 잡아먹음😢
노력하자~!