세상을 바꾸는 데이터

[백준 4673번] 셀프 넘버 - 파이썬 본문

PS Study/BOJ(백준)

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

Industriousness 2022. 1. 23. 23:11

 

문제 링크

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

 

문제 풀이
  • 문제에서 주어진 생성자가 있는 숫자함수를 이용해 만든다. 
  • 집합 하나를 만들어 생성자가 있는 숫자를 모두 추가한다.
  • 전체 set(1부터 10000까지) - 생성자가 있는 숫자 set을 한다. (차집합)
  • 생성자가 없는 숫자들의 집합을 오름차순 정렬 후 한 줄에 하나씩 출력한다.

 

이 문제는 대표적인 구현 및 완전 탐색의 문제집합의 개념을 활용해 풀 수 있다.

 

풀이 코드
# 4673번 셀프 넘버

# 생성자 함수 선언
def d(n):
  x = 0
  num = list(str(n))

  for i in num:
    x += int(i)
  
  return n + x


total_set = set()

# 생성자가 있는 숫자 모두 추가
for j in range(1, 10000):
  total_set.add(d(j))

# 전체 set에서 생성자가 있는 숫자를 빼는 차집합 이용
ans_set = set(range(1, 10000)) - total_set

# 셀프 넘버 오름차순 정렬 후 한 줄에 하나씩 출력
for k in sorted(ans_set, reverse=False):
  print(k)

 

 

4673번 셀프 넘버

 

 

 

728x90
반응형
Comments