안경잡이 구루루

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

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 4673 ( 셀프넘버 ) [ Python ]

구루루(gururu) 2020. 6. 27. 18:10
반응형


나:

def new_num():
    All =[]
    n=0
    for i in range(1,10001):
        All.append(i)
    for k in range(10000):
        n += 1
        new=0
        new = new+ int(n)

        for i in range(len(str(n))):
            new += int(str(n)[i])

        if new in All:
            All.remove(new)
            
    for i in All:
        print(i)

new_num()

완성된 코드는 위와 같다.

 

def new_num():
    All =[]
    self=[]
    n=0
    for i in range(1,10001):
        All.append(i)

위는 셀프넘인지 판단하기 이전에 설정하는 기본 설정부분이다.

새로운 수를 생성하는 new_num이라는 함수를 만든다.

1만까지 들어갈 리스트 all 을 위한 빈 리스트르 만들고1씩 증가할 n을 0으로 초기화.

for 반복문을 통해 1만까지 All 리스트에 1만까지 숫자 채워넣는다.  왜냐하면 문제에서 1만보다 작은 셀프 넘버를 구해야하기 때문이다.

 

    for k in range(10000):
        n += 1
        new=0
        new = new+ int(n)

        for i in range(len(str(n))):
            new += int(str(n)[i])

        if new in All:
            All.remove(new)

All에서 생성자를 없에 셀프넘버만 남기는 for 반복문 부분이다.

n은 1씩 증가하며 생성자인지 아닌지 판단된다. new는 피생성자로 0으로 초기화 한다. 이때 피생성자는 문제에서 알 수 있듯이 자기자신 n을 더해야 하기 때문에 초기값을 n을 더한 값으로 설정

n의 각 자리수를 new에 더해야 하기 때문에 len(str(n))을 이용해 길이를 구한후 각 자리수를 for 반복문을 통해 더한다

이때 생성자가 있는 것들은 All에서 지우고 결국에 All  리스트에는 셀프넘버만 남게 된다.

 

    for i in All:
        print(i)

new_num()

 셀프넘버만 남은 All을 한줄에 하나씩 출력한다.

입력값이 없으니 위 함수를 바로 실행하기 위해 함수이름에 인자값 없이 new_num()만 씀.


다른사람:

https://this-programmer.com/entry/%EB%B0%B1%EC%A4%804673%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%85%80%ED%94%84-%EB%84%98%EB%B2%84

natural_number_set = set(range(1, 10001))
generated_number_set= set()

for i in range(1, 10001):
    for j in str(i):
        i += int(j)
    generated_number_set.add(i)

self_number_set = natural_number_set - generated_number_set

for i in sorted(self_number_set):
    print(i)

완성된 코드는 위와 같다.

위 코드의 자세한 설명은 직접 링크를 타고 가서 보는게 더 좋은거 같다.

 

반응형