개발자 구하기
2006-03-31 12:52:18
올해 초부터 개발팀에서 병역특례로 개발자를 구하고 있는데요, 지금까지 스무번? 정도 면접을 본 것 같습니다.
좋은 사람과 일하고자 하는 욕구는 어디나 같은지라, 면접시 간단한 코딩 테스트를 하고 있는데요. (올해부터 처음 하는 것입니다^^;)
1시간 정도의 시간을 드리고 5문제 중에서 풀 수 있는 문제를 자신있는 언어로 푸는 방식입니다. 구글링하시라고 인터넷도 연결해 놓고요. (근데 대부분 네이버 지식인에서 검색하시더군요)
따끈따끈한 커피는 제가 대접해드리고요.
문제들은 "정상적인 개발 과정을 거친 분들이라면 쉽게 풀 수 있는" 기본적인 문제를 출제하는데요 (물론 출제자 기준입니다--;)
문자열이나 배열을 다룰 줄 아는가, 기초적인 DB 활용이 가능한가 등의..
그 중 한 문제를 오늘 얘기해보자면,
"1부터 27000 사이의 숫자 중에서 중복되지 않는 숫자 24000개를 무작위로 뽑아내어 출력하세요"
이렇게 간단하게 작성 가능한 문제를 내는 이유는
지원자가 작성한 코드를 가지고 3인의 면접관이, 더 효율적인 방법이 있는지 있다면 구현할 수 있는지를 테스트 후에 지원자분과 즐겁게 얘기해보기 위해서였습니다.
따라서
위의 코드는 루프문에서 랜덤하게 숫자를 추출하기 때문에 이미 뽑아낸 수와 중복되는 경우가 많아지면서(in_array에 걸리는 경우) 갈수록 느려지는 코드입니다.
위와 같은 코드는 개선의 여지가 상당히 많기 때문에 지원자분에게 더 나은 방법을 모색해 보도록 할 수 있고, 그 과정에서 문제 해결의 능력을 볼 수 있기에 고마운 경우입니다만, 저런 코드라도 작성하신 분이 거의 없더군요.
어찌되었건 위의 코드는,
위와 같이 항상 동일한 반복 횟수를 보장하는 코드로 개선시킬 수 있습니다.
또한 코드상의 반복문을 제거하고 $buffer에 할당되는 데이터를 줄이려면 PHP의 풍부한 배열 관련 함수를 이용하여
위와 같이 작성할 수도 있습니다.
대부분의 지원자분들이 맞는 결과를 내놓지 못했다는 사실보다는,
테스트 후 같이 검토하는 자리에서조차 문제 해결 능력을 보여주지 못했다는 사실이 더 답답했습니다.
면접의 긴장감을 고려하더라도 말이죠.
...결론은, 병역특례 개발자를 뽑고 있으니 저와 일하고 싶으신 분은 메일을 ^^;
좋은 사람과 일하고자 하는 욕구는 어디나 같은지라, 면접시 간단한 코딩 테스트를 하고 있는데요. (올해부터 처음 하는 것입니다^^;)
1시간 정도의 시간을 드리고 5문제 중에서 풀 수 있는 문제를 자신있는 언어로 푸는 방식입니다. 구글링하시라고 인터넷도 연결해 놓고요. (근데 대부분 네이버 지식인에서 검색하시더군요)
따끈따끈한 커피는 제가 대접해드리고요.
문제들은 "정상적인 개발 과정을 거친 분들이라면 쉽게 풀 수 있는" 기본적인 문제를 출제하는데요 (물론 출제자 기준입니다--;)
문자열이나 배열을 다룰 줄 아는가, 기초적인 DB 활용이 가능한가 등의..
그 중 한 문제를 오늘 얘기해보자면,
"1부터 27000 사이의 숫자 중에서 중복되지 않는 숫자 24000개를 무작위로 뽑아내어 출력하세요"
이렇게 간단하게 작성 가능한 문제를 내는 이유는
지원자가 작성한 코드를 가지고 3인의 면접관이, 더 효율적인 방법이 있는지 있다면 구현할 수 있는지를 테스트 후에 지원자분과 즐겁게 얘기해보기 위해서였습니다.
따라서
$result = array();
for ($i=0 ; $i<24000 ; $i++)
{
do
{
$num = rand(1,27000);
}
while(in_array($num,$result));
$result[] = $num;
}
echo implode("\n",$result);
위의 코드는 루프문에서 랜덤하게 숫자를 추출하기 때문에 이미 뽑아낸 수와 중복되는 경우가 많아지면서(in_array에 걸리는 경우) 갈수록 느려지는 코드입니다.
위와 같은 코드는 개선의 여지가 상당히 많기 때문에 지원자분에게 더 나은 방법을 모색해 보도록 할 수 있고, 그 과정에서 문제 해결의 능력을 볼 수 있기에 고마운 경우입니다만, 저런 코드라도 작성하신 분이 거의 없더군요.
어찌되었건 위의 코드는,
for ($i=1;$i<=27000;$i++)
$buffer[$i] = $i;
shuffle($buffer);
for ($i=0;$i<24000;$i++)
$result[] = $buffer[$i];
echo implode("\n",$result);
위와 같이 항상 동일한 반복 횟수를 보장하는 코드로 개선시킬 수 있습니다.
또한 코드상의 반복문을 제거하고 $buffer에 할당되는 데이터를 줄이려면 PHP의 풍부한 배열 관련 함수를 이용하여
$a = array_keys(array_fill(1,27000,true);
shuffle($a);
echo implode("\n",array_splice($a,0,24000));
위와 같이 작성할 수도 있습니다.
대부분의 지원자분들이 맞는 결과를 내놓지 못했다는 사실보다는,
테스트 후 같이 검토하는 자리에서조차 문제 해결 능력을 보여주지 못했다는 사실이 더 답답했습니다.
면접의 긴장감을 고려하더라도 말이죠.
...결론은, 병역특례 개발자를 뽑고 있으니 저와 일하고 싶으신 분은 메일을 ^^;
22 comments »