
이번주는 드디어 고대하던 배열을 활용한 문제를 풀어보려고합니다.
셀프 넘버에 대해서 아시나요?
셀프 넘버란, n에 대해서 n과 각 자리수를 더한 수를 말합니다.

마땅한 드립이 떠오르지 않네요.
오늘은 셀프 넘버를 구해보겠습니다.

int main() {
int a[100001] = {0,};
int sum, count = 0;
for (int i = 1; i <= 10000; i++) {
sum = 0;
if(i < 10) {
sum = i + i;
a[sum] = 1;
} else if(100 <= i && i <= 999) {
sum = i + (i/100) + (i/10)%10 + (i%10);
a[sum] = 1;
} else if (10 <= i && i <= 99){
sum = i + i/10 + i%10;
a[sum] = 1;
} else {
sum = i + (i/1000) + (i/100)%10 + (i/10)%10 + i%10;
a[sum] = 1;
}
if (a[i] != 1) {
a[i] = i;
count++;
printf("%d\n", a[i]);
}
}
}
사실 보시면 아시겠지만, if문이 순서대로 정렬되어있지 않습니다.
셀프 넘버는 n 본인과 각 자리수를 더해주어야 하기 때문에, 두자리 수 계산, 세자리 수 계산, 네자리 수 계산이 별도로 필요했습니다.
배열은 생성자를 만들어준 뒤, 배열의 자리수에 생성자를 배치하고, 해당 배열에는 1을 넣어 통일성을 주었습니다. 그런 뒤, 1이 아닌 것을 순서대로 출력 해 주었습니다.
드디어 오늘 solved.ac 실버를 찍었습니다...

오늘은 이렇게 넘어가지만, 다음엔 더 재밌는 드립으로 가만두지 않겠습니다 찾아오겠습니다.
감사합니다.