본문 바로가기

C 알고리즘

코드업 1615 : 셀프 넘버(Self-Number)

 

문제링크

 

셀프 넘버(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이라고 표시하지 않은 수에서만 덧셈을 해준다.

 

그렇다면 이렇게 깔끔하게 정확한 풀이가 뜰 것이다.

이는 넥슨 입사시험에 나온적이 있다고 하는데, 크게 어려운 문제는 아니다.

조금만 생각해보면 풀 수 있는 문제였다.

 

이해가 다 되지 않았다면 코드 복붙을 하지 않는 것을 권장한다. (특히 코드업은 더)