[C++] 백준 4673번 풀이 (셀프 넘버)

정민경·2023년 1월 20일
0

baekjoon

목록 보기
21/57
post-thumbnail

- 문제 (4673번) : 셀프 넘버

  • 셀프 넘버를 한 줄에 하나씩 출력하는 문제
    • 셀프넘버란?
      어떠한 숫자 n과 n의 각 자리수를 더해 어떠한 값 k가 나온다.
      이때 n을 k의 생성자라고 한다.
      이러한 생성자가 없는 숫자를 셀프 넘버라고 한다.

      ex) 101은 셀프넘버인지 판별
      - 생성자 : 91, 100
      - 91 + 9 + 1 = 101
      - 100 + 1 + 0 + 0 = 101
      ∴ 101은 생성자가 있으므로 셀프넘버가 아님.


- 입력 및 출력

[ 입력 ]

  • 입력은 없다.

[ 출력 ]

  • 10,000보다 작거나 같은 셀프넘버를 한줄에 하나씩 오름차순으로 출력

- 문제 풀이

  • 생성자가 없는 값이 셀프넘버이므로 생성자를 찾으면 된다.
    이 말은 어떠한 수 n으로 어떠한 수 k가 만들어진다면 k는 생성자가 있는 것이다.

  • 1부터 10,000까지의 숫자로 어떠한 값 k를 만들고, k를 1 ~ 10,000 까지의 배열에서 걸러주고 남은 값들이 셀프넘버가 된다.

    1. 생성자가 있는지 확인하는 함수
      ( 어떠한 숫자 n과 n의 각 자리수를 더해주는 함수 )
    1. 1번의 함수를 가지고 1 ~ 10,000이 있는 배열에서 삭제
      이 말은 boolean 배열에서 true로 바꿔줌.
    1. 2번까지의 과정으로 걸러진 배열에서 false, 즉 생성자가 없는 수가 셀프넘버가 되고, 이 값을 출력

- 최종 코드

0개의 댓글