[백준 4673번][Python/파이썬] 셀프 넘버

공학도 Lee·2023년 2월 3일
0

백준 문제 풀이

목록 보기
8/63
post-custom-banner

1. 문제


출처: 백준 4673번 셀프 넘버

2. 풀이


출력 부분을 보면, 10,000까지의 셀프 넘버를 구하라는 것을 확인할 수 있다.
문제에서 설명해 준 규칙을 이용하여 셀프 넘버가 아닌 것들을 구하고, 제외해 주면 된다.

어떤 방식으로 각 자릿수를 더해주는 것이 좋은지가 이 문제의 핵심이다.
map 함수와 숫자를 문자열로 변환해 주는 것을 활용하면 쉽게 더해줄 수 있게 된다.
더해서 나오는 숫자가 같은 것일 수도 있는데, set을 활용하면 중복 요소도 쉽게 처리할 수 있다.

3. 소스코드


numbers = set(range(1,10**4+1))
non_self_numbers = []

for i in range(1,10**4+1):
    non_self_number = i+sum(map(int,str(i)))
    non_self_numbers.append(non_self_number)
    
self_numbers = numbers - set(non_self_numbers)
self_numbers = list(self_numbers)
self_numbers.sort()
print(*self_numbers,sep="\n")

4. 그 외


처음에는 각 자릿수를 더해주는 것이 쉽게 떠오르지 않아서, 다른 분의 풀이를 참고했던 것으로 기억한다.
일일이 10,100,1000으로 나누어서 더해줘야 하나라고 고민도 해봤던 것 같다.
해당 풀이로도 충분히 접근이 가능해 보이나, 문자열을 활용하는 것이 코드가 참 깔끔해 보인다.

profile
이창민, Changmin Lee
post-custom-banner

0개의 댓글