셀프 넘버(Self-Number)
1부터 10사이의 셀프 넘버는 1, 3, 5, 7, 9이다. 따라서 합은 25
codeup.kr
이 문제는 각 수의 제네레이터를 찾는 방식으로 접근하면 힘들어진다.
풀이
'이 수는 어떤 수의 제네레이터인가'를 찾는 방식으로 푼다.
예를 들어서 1은 1+1로, 2의 제네레이터이다. 그렇다면 2는 제네레이터가 있기 때문에 셀프넘버가 아니다.
이어서, 2는 2+2로, 4의 제네레이터이다. 그렇다면 4는 셀프넘버가 아닌 것이다.
이런 방법으로 셀프넘버가 아닌 수들을 찾아내면 된다.
또한 어떤수가 각 자릿수와 그 수를 더해서 나온 수의 제네레이터인 점을 생각해보면,
A는 B의 제네레이터라고 할 때, A 보다 항상 B가 크다. (A가 자연수일 때)
따라서 시작 값(a)과 마지막 값(b)의 제네레이터 여부를 확인하려면
1 부터 b 까지 반복문을 돌려 '어떤 수의 제네레이터인가' 인지 확인하여 그 '어떤 수'는 셀프넘버가 아니라고 배열에 체크만 하면 된다.
위는 어떤 수의 제네레이터인지 찾는 함수이다.
이 함수를 이용해서 반복문을 만들면,
이렇게 제네레이터가 있는 수는 배열에 '1'이라고 표시를 해둔다.
그 후 이렇게 배열에 1이라고 표시하지 않은 수에서만 덧셈을 해준다.
그렇다면 이렇게 깔끔하게 정확한 풀이가 뜰 것이다.
이는 넥슨 입사시험에 나온적이 있다고 하는데, 크게 어려운 문제는 아니다.
조금만 생각해보면 풀 수 있는 문제였다.
이해가 다 되지 않았다면 코드 복붙을 하지 않는 것을 권장한다. (특히 코드업은 더)
'C 알고리즘' 카테고리의 다른 글
BOJ 6588 : 골드바흐의 추측 (0) | 2021.03.13 |
---|---|
BOJ 1262 : 두 번째로 작은 스패닝 트리 (1) | 2020.10.04 |
코드업 3290 : 최소 비용 신장 트리 (0) | 2020.08.14 |
코드업 3410 : 금고 열기 (2) | 2020.08.13 |
코드업 5012 : 메시지 전달 (3) | 2020.06.07 |