BJ4673_셀프_넘버_python

1. 문제링크

https://www.acmicpc.net/problem/4673

2. 풀이 전 계획과 생각

< 정보 정리 >

1) 입력값: 없음 (1 - 10,000 range)
2) 출력값: range 내의 모든 셀프 넘버
3) 제약조건: 1 <= N <= 10,000
4) 예외케이스: 없음

< 공통 로직 >

  • d(ab) = ab + a + b => cd (cd는 셀프 넘버가 아니다)
  • 1-10000 수에서 셀프 넘버가 아닌 수들을 빼준다.

3. 풀이

def get_self_number(a, b):
  if b < a:
    print("b must be greater than a")
    return
  not_self_num = set()
  for i in range(a, b):
    not_self_num.add(d(i))
  range_num = set(range(a, b))
  self_num = range_num - not_self_num
  for i in sorted(self_num):
    print(i)


def d(n):
  a = 0
  b = list(str(n))
  for i in b:
    a += int(i)
  return a + n

get_self_number(1, 10000) # 1 3 5 7 9 20 31 42 ...

4. 풀이하면서 막혔던 점과 고민

처음엔 셀프넘버를 모두 찾자는 생각에 빠져 있어서 더 쉬운 셀프넘버가 아닌 수를 활용하는 방법을 간과했다.

5. 풀이 후 알게된 개념과 소감

이 문제에서는 set의 유용성을 배울 수 있었다.

Credits:

좋은 웹페이지 즐겨찾기