Mr X MYPI

Mr X
접속 : 5780   Lv. 71

Category

Profile

Counter

  • 오늘 : 70 명
  • 전체 : 156909 명
  • Mypi Ver. 0.3.1 β
[자습] 넥슨 입사문제 중에서 - 001 (6) 2015/07/11 PM 12:48

어떤 자연수 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);
}

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

신고

 

고랭지농사    친구신청

와.. 머징 ㅋㅋ.. 외계어같네 ㄷㄷㄷ

세상을 열다    친구신청

뭐...뭐야이게

Chris Daughtry    친구신청

근데 보통 입사시험에서 코딩문제 낼때

c로 풀어도 되나요? 씨플이나 자바 안쓰고요

JuliaHart    친구신청

언어는 상관 없습니다.
직접 컴파일해서 답 뽑아야 하는 문제가 아니라면
의사코드로 작성해도 알고리즘만 맞으면 됩니다.

루즈키    친구신청

넥슨을 포기한다!

JuliaHart    친구신청

옛날에 정올 나간다고 맨날 이런 문제만 봤었는데..
그땐 코딩이 왜 그리 재밌었는지...
지금은 진짜 돈만 아니면 존나 하기 싫음..
X