• [자습] 넥슨 입사문제 중에서 - 0012015.07.11 PM 12:48

게시물 주소 FONT글자 작게하기 글자 키우기
LINK : //codingdojang.com/scode/365


어떤 자연수 n이 있을 때, **d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자**라고 정의하자.




ex> d(91) = 9 + 1 + 91 = 101




이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다.




어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91뿐 아니라 100도 있다. 그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라고 이름 붙였다. 예를 들어 1, 3, 5, 7, 9, 20, 31은 셀프 넘버 들이다.




1이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라.



일단 d(n)을 손으로 쭉 뽑아보면...


d(1) = 1 + 1 = 2

d(2) = 2 + 2 = 4

d(3) = 3 + 3 = 6

d(4) = 4 + 4 = 8

d(5) = 5 + 5 = 10

d(6) = 6 + 6 = 12

d(7) = 7 + 7 = 14

...


결과 값과 빠진 수를 표시 해 보면


1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...



  1. 1. d(n)이 5000이 될 때까지 구한다.

  2. 2. 1에서 5000까지의 숫자중에서 d(n) 값을 비교하여 빠진 숫자들을 찾아낸다. (어떻게???)

  3. 3. 빠진 숫자들을 더한다.


일단은 1번까지만...


objective-C


#import <Cocoa/Cocoa.h>


int main(int argc, const char * argv[ ]) {
int n, temp, d[5001]={};
n = 1;
temp = 1;

while (d[n] < 5000) {
temp = n;
while (temp > 0) {
d[n] = d[n] + (temp % 10);
temp = temp / 10;
}
d[n] = d[n] + n;

printf("d[%d] = %d\n", n, d[n]);

n = n + 1;
}
return NSApplicationMain(argc, argv);
}


2번은 어떻게 해결을 해볼까? 싶어서 고민을 해봤는데 역시나 무식하게 제일 쉽고 편하 방법 같아서...(역시 무식한게 빠르고 편한???)

1 ~ 5000까지 일일이 d(n) 값과 비교를 해보고 이중에 같은 값이 없으면 따로 표시를 해주는 방식으로 만든 다음 그 표시된 값이 있는 d(n) 값을 일일이 더해주는 방법을 써보기로 하였다.


objective-C


#import <Cocoa/Cocoa.h>


int main(int argc, const char * argv[]) {
int n, temp, sum_of_selfnumber, selfnumber_check, d[5001] = {}, generator;
n = 1;
temp = 1;
generator = 0;

while (generator < 5000) {
temp = n;

while (temp > 0) {
d[n] = d[n] + (temp % 10);
temp = temp / 10;
}

d[n] = d[n] + n;
generator = d[n];

printf("d[%d] = %d\n", n, d[n]);

n = n + 1;
}

n = 1;
temp = 1;
generator = 0;
sum_of_selfnumber = 0;
printf("\n");

while (n <= 5000) {

while (generator < 5000) {

generator = d[temp];
if (n == generator) {
selfnumber_check = 1;
}
else {
selfnumber_check = 0;
}

temp = temp + 1;
}

if (selfnumber_check == 0) {
sum_of_selfnumber = sum_of_selfnumber + n;
}

n = n + 1;
}

printf("%d", sum_of_selfnumber);
return NSApplicationMain(argc, argv);
}

뭔가 대단히 씔대없이 길어진 느낌이다. 근데 실행을 해보니 답이 틀리게 나온다. 망할~~ 좀 더 공부해야겠다...

댓글 : 6 개
와.. 머징 ㅋㅋ.. 외계어같네 ㄷㄷㄷ
뭐...뭐야이게
근데 보통 입사시험에서 코딩문제 낼때

c로 풀어도 되나요? 씨플이나 자바 안쓰고요
언어는 상관 없습니다.
직접 컴파일해서 답 뽑아야 하는 문제가 아니라면
의사코드로 작성해도 알고리즘만 맞으면 됩니다.
넥슨을 포기한다!
옛날에 정올 나간다고 맨날 이런 문제만 봤었는데..
그땐 코딩이 왜 그리 재밌었는지...
지금은 진짜 돈만 아니면 존나 하기 싫음..
친구글 비밀글 댓글 쓰기