2009년 05월 20일
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접
방금 면접관으로 면접을 보고 왔습니다. 결과는 X 였는데요. 뭐랄까 좀 충격적이었습니다;
강원도쪽 H 대학 정보통신공학부를 나와서 서울대 아닌 S대를 대학원 전자전기컴퓨터공학부를 나왔습니다;
소프트웨어 부분 수상 경력도 있어서 코딩은 좀 하려나 했었죠.
그런데 일단 대학원에서 한 내용 자체가 좀 애매 했습니다. 대부분의 내용이 기존에 있는 알고리즘 돌려 보고 비교 해 본 결과입니다. 코딩 능력이 전혀 필요 없고, 연구 능력도 필요 없습니다. 그냥 있는 코드 잘 돌아가게 만들어서 몇몇 비교 방법을 통해 비교만 해 본 것 같더군요. 안 그래도 대단히 의심되고 있는 상황에서.. 프로그래밍 언어는 뭐를 주로 썼냐고 물어 보니 주로 C를 했고 MFC, 자바를 한다고 했습니다. 코딩 문제를 냈습니다.
int main()
{
char str[] = "abcde";
reverse(str);
printf("%s\n", str);
return 0;
}
결과
edcba
void reverse(char* str)
{
/// 구현하시오
}
이렇게 써줍니다. 몇가지 가르쳐 준 후에도 이렇게 풀더군요;
void reverse(char* str)
{
int a, b = 0;
int i;
char* aa;
a = strlen(str); // 여기를 처음에 파일의 길이를 알아내는 함수를 써야 한다고 한글로 썼었습니다.
b = a;
for ( i = 0 ; i <= a ; i++ )
{
aa = str(b);
b = --a;
}
memcpy (str, a , sizeof(char));
}
뭐 어떻게 고쳐줄수도 없을 만큼 많이 틀려서;; 게다가 str(b)는 틀렸다고 했는데 포인터이기 때문에 끝까지 맞다고 주장해서.. ;
괴로웠습니다; 지난번 두번의 면접관은 둘다 석사병특이라 학벌이 좀 괜찮은 사람들이었습니다. 그 사람들은 버벅대긴 했지만 그런대로 풀었었는데, 이렇게 까지 못 푸니깐 정말 뭐라 말을 해야 할지 어렵더군요 ㅜ.ㅜ
제 개인적인 생각인지는 모르겠는데, 사실 공대에서 소프트웨어 관련(컴공이나 전산)으로 전공을 했다고 하면 프로그래밍은 기본이라고 생각합니다; 학부생도 아니고 대학원까지 나온 학생이 학술제 소프트웨어 부문 최우수상 까지 탄적이 있다는 학생이 저렇게 풀다니 정말 충격입니다; 게다가 주로 사용한 언어가 C라고 했단 말이죠.
틀린데가 한 두군데가 아닌데다가 설명을 해 줘도 모르는 것으로 봐서 메모리 개념, 스트링에 대한 기본 개념도 없어 보이는 것으로 봐서 copy, paste 코더였거다 코딩을 거의 안 해 봤거나 둘중에 하나가 아닌가 합니다만; 여튼.. 정말 면접 들어가서 어찌해야 할지 모르겠는 이런 경우는 정말 힘든거였군요.
아 정말. 자신이 컴공 나왔고 소프트웨어 분야에서 일하고 싶으신 분들은 최소한의 기본 프로그래밍 능력은 기르셔야 합니다; 그리고 저런 사람한테 학위를 주는 학교도 좀 문제 있는거 아닌가 하는 생각마저 드는군요;
ps. 문제는 수정했습니다. 실제 문제 낼때 printf 계수는 틀리지 않았는데 리턴은 굳이 안 했군요. main의 return은 gcc에서는 워닝으로 그냥 넘어가다 보니 가끔 잊어 먹네요
ps2. char str[] = "abcde"; 이거랑 char* str = "abcde"; 이거 차이 모르시는 분도 꽤 많군요; 후자는 쓰기가 안 되죠; 전자는 됩니다;
강원도쪽 H 대학 정보통신공학부를 나와서 서울대 아닌 S대를 대학원 전자전기컴퓨터공학부를 나왔습니다;
소프트웨어 부분 수상 경력도 있어서 코딩은 좀 하려나 했었죠.
그런데 일단 대학원에서 한 내용 자체가 좀 애매 했습니다. 대부분의 내용이 기존에 있는 알고리즘 돌려 보고 비교 해 본 결과입니다. 코딩 능력이 전혀 필요 없고, 연구 능력도 필요 없습니다. 그냥 있는 코드 잘 돌아가게 만들어서 몇몇 비교 방법을 통해 비교만 해 본 것 같더군요. 안 그래도 대단히 의심되고 있는 상황에서.. 프로그래밍 언어는 뭐를 주로 썼냐고 물어 보니 주로 C를 했고 MFC, 자바를 한다고 했습니다. 코딩 문제를 냈습니다.
int main()
{
char str[] = "abcde";
reverse(str);
printf("%s\n", str);
return 0;
}
결과
edcba
void reverse(char* str)
{
/// 구현하시오
}
이렇게 써줍니다. 몇가지 가르쳐 준 후에도 이렇게 풀더군요;
void reverse(char* str)
{
int a, b = 0;
int i;
char* aa;
a = strlen(str); // 여기를 처음에 파일의 길이를 알아내는 함수를 써야 한다고 한글로 썼었습니다.
b = a;
for ( i = 0 ; i <= a ; i++ )
{
aa = str(b);
b = --a;
}
memcpy (str, a , sizeof(char));
}
뭐 어떻게 고쳐줄수도 없을 만큼 많이 틀려서;; 게다가 str(b)는 틀렸다고 했는데 포인터이기 때문에 끝까지 맞다고 주장해서.. ;
괴로웠습니다; 지난번 두번의 면접관은 둘다 석사병특이라 학벌이 좀 괜찮은 사람들이었습니다. 그 사람들은 버벅대긴 했지만 그런대로 풀었었는데, 이렇게 까지 못 푸니깐 정말 뭐라 말을 해야 할지 어렵더군요 ㅜ.ㅜ
제 개인적인 생각인지는 모르겠는데, 사실 공대에서 소프트웨어 관련(컴공이나 전산)으로 전공을 했다고 하면 프로그래밍은 기본이라고 생각합니다; 학부생도 아니고 대학원까지 나온 학생이 학술제 소프트웨어 부문 최우수상 까지 탄적이 있다는 학생이 저렇게 풀다니 정말 충격입니다; 게다가 주로 사용한 언어가 C라고 했단 말이죠.
틀린데가 한 두군데가 아닌데다가 설명을 해 줘도 모르는 것으로 봐서 메모리 개념, 스트링에 대한 기본 개념도 없어 보이는 것으로 봐서 copy, paste 코더였거다 코딩을 거의 안 해 봤거나 둘중에 하나가 아닌가 합니다만; 여튼.. 정말 면접 들어가서 어찌해야 할지 모르겠는 이런 경우는 정말 힘든거였군요.
아 정말. 자신이 컴공 나왔고 소프트웨어 분야에서 일하고 싶으신 분들은 최소한의 기본 프로그래밍 능력은 기르셔야 합니다; 그리고 저런 사람한테 학위를 주는 학교도 좀 문제 있는거 아닌가 하는 생각마저 드는군요;
ps. 문제는 수정했습니다. 실제 문제 낼때 printf 계수는 틀리지 않았는데 리턴은 굳이 안 했군요. main의 return은 gcc에서는 워닝으로 그냥 넘어가다 보니 가끔 잊어 먹네요
ps2. char str[] = "abcde"; 이거랑 char* str = "abcde"; 이거 차이 모르시는 분도 꽤 많군요; 후자는 쓰기가 안 되죠; 전자는 됩니다;
# by | 2009/05/20 11:52 | 트랙백(17) | 핑백(4) | 덧글(131)






☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : 내가 무서워 하는것 중 하나
가끔 내가 정말 심각할정도로 무서워 하는게 하나 있는데, 그게 뭣이냐 하면.. 내가 프로그램을 졸랭 못짜는 상상. 병신스러운건 알고 있는데, 정말로 가끔 그런 상상을 하면서 심각할정도로 겁에 질릴때가 있다. 누군가 갑자기 덥석 어떤 문제를 던져 주었을때, 그러니까 하나의 솔루션을 만들라고 하는게 아니라 간단한 알고리즘을 만들어 내라고 하는데 그걸 제대로 못만드는거다. 나는 그닥 내공이 좋은 개발자가 못되어......more
제목 : 그러니까 C 문자열의 순서를 뒤집으려면.
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 이 글 보고 좀 충격을 받았다. 대학원생이 저런 간단한 코드를 못짠다니!! 게다가 내가 다니는 학교도 서울대 아닌 S대. 왠지 내 주변의 이야기 같아서 더 충격을 받았다. 보통 이정도 수준의 코딩은 C를 처음접하면서 포인터나 문자열 처리를 배울때 해보기 마련이다. 그러니까 대충 학부 1학년이나 2학년 수준에서 이미 끝나는 수준이다. &nb......more
제목 : 뭐랄까..
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접아니.. 아무리 요새 C를 안쓰고 고급언어 어쩌고 한다 해도.. 이건 좀 아니잖아..;;참고로 이정도 수준은 전공도 아니고, 1학년 교양수업 수준이다. 원글에서 답을 쓴 사람은 대체 무슨 생각으로 답을 쓴건지 잘 모르겠는데.. 몇줄 되지도 않는 간단한 코딩이다. 문제를 보자.int main(){ str[] = "abcde"; reverse(str); pr......more
제목 : 문자열 뒤집기 저는 요렇게!
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 #include <stdio.h> #include <stdlib.h> // func system() void Reverse(char* szStr); int main(int agrc,char **argv) { char szStr1[] = "abcde"; // 홀수 개 &n......more
제목 : 내가 이래서 개발일 하기 싫어 -_-
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 나 대학때 C 아주 처참하게 낙제했었다. 물론 연애하느라고 정신없어서 클래스 다 쨌던 이유도 있긴 하지만, 시험 전날 C 의 포인터는 그야말로 난공불락 ㅅㅂ 아돈노 장벽이었다. 아직도 잘 모른다 ㅋㅋ 내가 한 언어는 파이썬, 자바, 펄 등이고, 그것도 그냥 유저 혹은 코더 레벨이지 내가 정식으로 프로그래밍 공부한 적도 없고, 까라면 까다보니 배운 거라 뭐. 저 문제 보고 나서 또 ......more
제목 : 이런 글만 보면 뜨끔해서 트랙백
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접이런 글이 가끔 IT밸리에 올라오는데, 그때마다 정신차려야지, 한다. 컴공 아닌분들을 위해 얘기하자면 저정도는 대학 1학년 말에 마쳐야 b+이상의 학점을 딸 수 있는, 그정도의 간단한 일이다.(물론 나같이 1학년 전과목을 날려먹은 애들은 못한다 ㅋ_ㅋ_ㅋ_ㅋ_ㅋ_ㅋ_ㅋ 난 전공과목 병신이니까 ㅋ_ㅋ_ㅋ_ㅋ)그리고 그 다음부터 전혀 하지 않게 된다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ......more
제목 : G사와 N사의 코딩 면접.. + 전산책들...
전세계에서 짱드시고 계신 G사. 한국의 경우에도 회사에 점심에 출장뷔페를 해주는 그 회사에 전에 면접을 본적이 있다. 사실은 그냥 아는 형님이 면접보러오라는 이야길 해서, 나도 넣어보겠어! 라는 단순한 사유였으나.. 운좋게도 제법 올라갔었다. 어차피 시험볼때 쓰는 서약서 덕분에 뭐라고 문제를 밝힐 수준은 못되지만... 면접에서 제법 많이 올라 가봤던 경험으로는.. (물론 경력은 아니고 신입이었다만..) G사에서 필요한 정도는 ACM레벨이라면 스......more
제목 : 학부생 수준은 이정도
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접요새 IT밸리에 대세 타고 있는 포스팅,일단 나는 컴공 4년 졸업(중간 휴학1년 포함)생이며 지금 개발일 하고있슴미.임베디드 C++ 다루고 있으며, JSP도 가끔 하고 .. .데이터베이스는 Sybase(임베디드용)랑 Oracle 쓰고 있네효 아직 신입이라 수준은 학부생_-후후나름 C언어는 열심히 했다지만 난 아직 1학년 수준; 후후void reverse(char *str){ ......more
제목 : 허접 공돌이의 답안
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접어째 글 내용과는 상관없는 문제에 대한 답을 트랙백하네요void Swap(char* lhs, char* rhs){ char temp = *lhs; *lhs = *rhs; *rhs = temp;}void reverse(char* str){ UINT nLength = ::strlen(str); UINT endIndex = nLength/2; for ( U......more
제목 : 문자열 뒤집기가 주는 의의
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접저도 떡밥 덥썩 물어보렵니다.지금 IT밸리에서 거주하고 있는 개발자 및 개발자 지망생, 그리고 저 같은 학생 분들께서 위의 사태(?)에 대해 극히 우려를 표명하고 나섰습니다.사실 저도 이 글을 보고 참 문제스럽다.. 싶긴 했었지만.존경하는 스승님(?)께서 들려주신 면접 사례를 보아서는 이정도는 가능하기도 하겠다.. 했습니다. 뭐 일단 이건 차차 다시 살펴보도록 하구요.예전에 한번 만들어 본 적이......more
제목 : 리오의 생각
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접… 모 게임회사 다니시는 분한테 같은 얘기 듣고 설마 했는데 사실이었구나....more
제목 : 아 진짜 급 이런생각이
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 예전에 학교 다닐때 UML 시간에 우리과 1등이 했던말이 생각 나네요 ㅡㅡ ;; "저희가 할수 있는 프로그래밍 실력은 구구단 정도 밖에 안되는데 무슨 프로젝트 입니까" 저 대답에 교수님도 나도 하늘도 신도 울었다지요 ㅡㅡ; 교수님은 어땠을까요 참 당혹함을 감출수도 없고 그래서 일딴 빼더라구요 참 컴공과 나와서 답답하네요 ~ 쩝 ...more
제목 : 이게 왜 문제가 되는거지?
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 면접을 본 저 사람이 좀 심하게 바보같았다는 생각은 들지만.. (그리고 실제로 코딩 이외의 다른것도 잘할 것 같지는 않지만) 리플들에서 왜 코딩을 잘 못하는 사람들에 대해서 성토하는지 잘 이해가 안된다-_- 내가 전산 전공은 아니지만, 전산 전공이 코더를 키워내는 전공은 아니지 않나? 중요한건 얼마나 효율적인 알고리즘을 만들어내느냐, 그리고 그게 얼마나 합리적인 속도와 정확성......more
제목 : 천기누설의 생각
난 코드의 '코'자도 모르고 C언어라고는 본 적도 없는데 왜 이런 글을 보고 재밌어할까...more
제목 : 컴공교육에 대한 글을 보고 (.. )
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접이 글을 보고 이노랑 둘이 졸랭 씹던 중의 대화.[지영/윙이/wing/つばさ/翼] 읭...님의 말(오후 8:28):안그래도 아는애가 원문을 보고 글을 쓰기를왜 전산전공이 코딩 못한다는 게 욕먹을 짓이냐라는 글을 썼지;;[지영/윙이/wing/つばさ/翼] 읭...님의 말(오후 8:29):물론 걔는 전산전공이 아니라 몰랐을거야. 글의 요지는 대강코딩은 코더시키면 되지전산과는 걍 알고리즘만 만들면 되는......more
제목 : 나는 바보인건가...
우리나라의 컴공 교육에 대한 생각이 들게 하는 면접 위의 글을 보고 순간 저건 어떻게 코딩을 해야 하나 했다. 첫번째 부터 헷갈리는것이 문자열 길이를 구하는데 마지막 문자에 '\0' 이 들어가지 않는 경우도 있나 부터 생각했다. 두번째에는 '이걸 어떻게 swap 하지' 라는 생각이 들었다. 지금 2년차 개발자이다. 이렇게 기초적인것을 못 풀다니, 내가 이일을 계속해도 되는건가 하고 의문이 든다. 그런데 입사할때는 여러 책에서 봐서 저런 문제들은......more
제목 : 빙그레씨의 생각
지금 이글루스에서 이슈가 되고 있는 이 글을 보고 있으니 생각난건데, 코딩테스트만으로 사람뽑아놔도 막상 같이 일하기 힘든 타입인 경우도 있다....more
... 업무지원요청 등이 떨어진다 할 지라도 15일이면 충분해 보인다.(너무 많아.) 그래 사실 너무 실전 코딩 부분을 안하려고 하는 사람들이 많고 이번에 이글루 IT밸리 대문글에 reverse 에 관한 글도 그렇고 여러가지로 참 답답했다. 아무튼 간에 그냥 홧김에 "나라면 2일만에 만들 수 있어, 아무도 나한테 다른 잡일을 안시킨다면 말이지" 라고 말했다. 그 ... more
... 어제부터 계속 IT 밸리에 꾸준히 문자열 뒤집기에 관련된 글들이 올라오고 있다. 시작은 우리나라의 컴공 교육에 대한 생각이 들게 하는 면접이라는 글이었다. 그러면서 뒤이어 C언어가 어떻고, 포인터가 중요하고, 문자열은 메모리를 직 ... more
... http://lohengrin.egloos.com/1907690 [덥썩]그러게.. 프로그래밍이 중요하다제품에서 프로그램의 비중이 높아진다. 프로그램 가격이 비싸진다.이게.. 코더가 중요한게 아니라.아 ... more
... 블로그 돌아다니다가 "문자열 뒤집기" 대한 주제가 여기저기 있어서 한번 풀어보았다. 자세히는 모르겠습니다만. 저도 한번 풀어보았습니다. [관련 글] http://lohengrin.egloos.com/1907690 http://lesstopia.egloos.com/4953124 [문제] 문자열 뒤집기. : int main( ... more
void reverse(char *str)
{
int len, hlen, i;
char temp;
len=strlen(str);
hlen=len/2;
for(i=0;i<hlen;i++)
{
temp=str[i];
str[i]=str[len-i];
str[len-i]=temp;
}
}
문자열이 \0 처리가 안 되어있다던가 하는 예외처리가 전혀 안 되어있긴 하지만... 일단 그런건 넘기고 했을때 가장 간단한 코드로 하나 짜봤습니다. 돌아갈런지는 잘 모르겠네요.
프로그래머의 길 이외에 코더도 할 수 있는 웹서비스 같은걸로 전직한게 참 잘한일같아요.
웃긴건 회사 생활하다보면 코더인 저보다 응용력이 떨어지는 프로그래머가 보이면 참 한심해보인달까요;; C를 다루는 사람들이 VBA 만지는거 보고 "오오 신기하다" 라고 할줄은;;
중소기업도 입사시험을 좀 까다롭게 할 필요가 있다고 보입니다.
그보다도 입사시험 덤프를 공개해서 비슷한 경향의 문제로 입사시험을 보게 했으면 좋겠군요.. (외운걸론 못하도록;;)
이것저것 손을 많이 대보는 스타일이지만 고위언어나 대안언어 쪽으로 가면 매번 참 신기하니까요.
저런 문제는 10년전에도 입사시험 기술면접등에서 나온것이긴 한데 그때도 전산관련 졸업생인데도 버벅대는 이가 많았습니다. 당시에 원하는 내용은 문자열(정확히는 포인터)이 c언어에서 어떤식으로 처리되는가에 대한 이해를 묻는것이기 때문에 c표준함수를 사용해서 코드를 작성하면 무조건 아웃이었습니다.
기억을 더듬어 보면,
저 문제는 버퍼를 따로 할당하지 않고 c표준함수를 쓰지않는 루프문 수준에서 구현이 되어야만 정답이었습니다.
추가로 저것과 더불어 C++의 가상함수에 대한 내용 또한 의례 나오는 질문이었지요. ㅎㅎㅎ
_strrev, _wcsrev, _mbsrev
Reverse characters of a string.
char *_strrev( char *string );
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version
Return Value
Each of these functions returns a pointer to the altered string. No return value is reserved to indicate an error.
Parameter
string
Null-terminated string to reverse
_CRTIMP char * __cdecl _strrev(char *);
이게 있지요.
C 함수에 대해서 표준을 말하려면 C89, C99, C99 또는 POSIX 등을 기준으로 삼아야겠죠.
다른데서도 다 되는건 아닙니다.
안타깝군요 -_-;
코딩 경험이 적어서 기초가 많이 부족하거든요.
저건 0과 n-1, 1과 n-2 를 스왑하는 방식으로 구현하면 되지 않나요?
컴공이 아닌 정보통신공학부라서 그럴까요?
대학원에서 컴퓨터가 아닌 전기나 전자를 공부했다거나;;;
윗분이 올리신 인텔 면접문제는 어렵네요. 아직 실력이 부족해...;ㅇ;
지난달에 채용 지원 자격으로 7문제중 몇 문제 이상 풀어야 하는 S모 회사가 생각나네요.
지원했다가 전화면접에서 떨어졌지만...IIOTL
변수형 선언도 안되어 있고, printf("%s\n")는 뭘 출력하는지 빠져있고..
int main()인데 리턴도 없이 끝나고..
main만 보고는 디버깅하라는 문제인 줄..
근데 c를 주로 한다는 사람이 str(b)는 뭐래요;;
void reverse(char *str)
{
int i, j, len;
char temp;
len = j = strlen(str)-1;
for(i = 0; i < len/2; i++)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
j--;
}
}
근데 그래도 어케어케 자꾸 코딩하게 되는 상황에 처한다는 ;ㅁ; 닥치면 대강 하긴 해요.
다들 아마 부딪히는 게 있으면 google 신의 도움을 받아 닥치고 붙여 놓은 후 손질하는 식으로 코딩을 했을 지도 모릅니다.
하긴, 예전에 웹개발자 뽑을 때, 면접 오시는 7분 중 딱 한 분만 Database 접속해서 Recordset 받아오는 코드 짜는 데 성공하셨던 기억이 있네요. 필요하면 인터넷 검색해보라고 했었는데도 말이죠. 거기 비하면, 이 정도는 양반일지도..
같이 수업듣던 4학년생 2명이 학부과정을 못따라 오더군요.
컴퓨터 공학을 한다는 대학생들이 졸업반되서 책놓고 하는 학교 커리큘럼 조차
못따라오는게 현실인것 같습니다.
...물론 제가 지잡대 출신이긴 합니다만...
어쨋거나 그건 그렇더라도
소프트웨어 부분 수상 경력은
제가 봤을땐
인간관계를 효율적으로 이용(?)
어떻게 코딩 잘하는 친구녀석을 통해
아무래도 남이 코딩 해준거거나
팀으로 참가해서 상탄거면 코딩부분은
남이 코딩한걸로 상 거저 얻어먹은 사람 같네요.
학생시절 인간관계 친분만 잘 이용하면
빈대 붙어서 거저 상 얻어탈수있는?
요즘 상 타더라도 못믿습니다<-
#include <string.h>
#include <malloc.h>
void reverse1(char* str1)
{
int length = 0;
int i = 0;
char* str2 = 0;
length = strlen(str1);
str2 = (char*)malloc(sizeof(char) * length + 1);
for(i = 0; i < length; i++)
{
str2[i] = str1[length -1 - i];
}
str2[i] = 0;
printf("%s",str2);
free(str2);
}
int main()
{
char* str = "12345";
reverse1(str);
return 0;
}
=========================================
이거 할줄 알면 취직 되나요??
근데 실무를 보는 중소기업에서는 이런걸 못할 경우 거의 안 받아 줄겁니다.
저는 모대학 컴퓨터학과 1학년 학생입니다.
저도 뭐 이제 박사과정 들어가고있지만, 제 밑으로 저런 사람 들어온다고 하면 열받...
그나저나 심심해서 한번 저도 풀어봅니다.
void rever( char *str )
{
char *a, *b;
char tmp;
a=str;
b=strlen(str);
while( a<b )
{
tmp = *a;
*a = *b;
*b = tmp;
a++;
b--;
}
}
ㄱ-;;; 코딩 스타일이 드러나는군요 먼가
{
strcpy(str, "edcba");
}
....
그런데, 딴지를 달자면 main이 좀 이상하지 않나요.
str[] = "abcde" 이게 뭔가요? 풉!! char str[] = "abcde"로 혹은 char* str = "abcde" 해줘야 하는 것은 아닌지? C를 안한지 꽤 됐지만... 기본코드 같은데... 정말 간단히 생각나는대로 하면 아래정도 되지 않을런지.. 보충할려면.... 예외처리정도 해주고.(아래는 안했지만)
void reverse(char *s)
{
int c, i, j;
for (i = 0, j = strlen(s) - 1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
그런데 char* str = "abcde"; 이렇게 선언하면 str 메모리에는 안 써지기 때문에 char str[] = "abcde"; 이렇게 선언해야 합니다.
역시 C는 기본으로 할줄알아야되는건가 싶군요a..
Java로 짜라면 금방짜겠는데C로짜라면 멍.. 그래도 연습삼에 짜보니 되긴되는군요..
저래서 보통는 학력무관이라고 하는군요...
실상은 고졸자는 잘리는...
Perl을 “약간” 익히고 C를 다시 보니 쉽게 개념이 접수가 되었던...
정규과정중 과목중에서 Perl이 있었다면... 하는...
뭐 교육도 교육이지만 그걸 받아들이는 사람 문제도 있는듯
틀린부분을 찾는거라면
str(b); -> *(str + b); 포인터이므로 인덱스는 괄호가 아니라 더해야합니다.
b = --a; -> b--;
b = --a; 이렇게 하면 a 도 감소하기 때문에 for 문이 strlen(str) 갯수만큼 안돌게 되죠.
이런걸 짜는 건, 2가지 방법이 있는데,
1. 버퍼를 생성해서 거꾸로 집어넣은후에 전체 복사.
2. 맨 앞글자와 맨 뒤 글자를 바꿔주는 방법.
정답은 없으니 마음에 드는대로 짜면 되죠.
심하다...ㅋㅋㅋ
닥치고 문자열길이의 절반( 소숮점버림)에 대해
int n = length;( strlen도 좋고 그냥 while( pstr){ pstr++,length++;}
char * x = pstr의 첫포인터
char * y = (pstr + length);
해서 lenght/=2;
while( length){
*x^=*y^=*x^=*y;
x++;
y--;
length--;
}
정도로 생각했습니다.
만 먼가 헛점이 있을지도
(저런류가 은근히 마지막에 한번 빼먹고 도는 경우를 자주 저질러서
.. 나중에 해봐야겠군요
제가 조금 나아서 위로받고 갑니다
후다닥 ;
끄엥끄엥
오래된 옛날 면접보러다닐때 저는 이런 문제 나오면 그냥 pseudo code 썼던기억이 나는근요.
코딩을 잘하는 학생들은 모두 자기가 재미있어서 공부를 했거나 아르바이트하면서 경험을 더 쌓은 것 뿐이지요. 물론 그렇기 때문에 학생들이 학교 다니면서 개인적으로 조금 큰 프로젝트를 하나 진행해보는 것은 참 중요합니다만, 이때문에 한국 대학교 컴공 교육이 문제라고 생각하지는 않습니다. 전기전자학과 나온 학생한테 납땜질 못한다고, 기계공학부 학생한테 용접 못한다고 뭐라고 하는 것이랑 비슷하지요.
(물론 면접 보신 분을 변호하는 건 아닙니다. 하지만 컴공학위와 프로그래밍 능력은 직접적인 관계가 없다는 이야기를 드리고 싶었을뿐.)
상관없다는게 말이 안되죠 ㅡㅡ ;;
Computer Science가 프로그래밍을 배우는 학과인 건 아니지만, 기본으로 프로그래밍 커리큘럼이 있고, 다른 과목에서도 프로그래밍 스킬은 기본적으로 사용됩니다. 특히 OS 수업이나 Embeded Software 수업 같은 경우 프로그래밍 스킬 없이 수업을 소화할 수 없겠죠. 저 학부 3학년때만 하더라도 C언어로 embeded OS 하나 잡아 시뮬레이팅 하고 했었습니다. 스택 잡아서 컨텍스트 밀어넣고 스위칭하고 등등.. ucos 같은 간단한 os에 파일시스템을 구현해 넣는다든지, unix에 system call 몇개 구현해넣고.. 이런 과제들을 많이 했던 기억이 나네요. 데이터통신이나 무선네트워크 같은 수업에서도 학부 과정으로 tcp 내부 구현하고 프로토콜을 개선한다든지, weighted fair queue 알고리즘을 구현해 본다던지.. 하는 과제들은 학부 수준에서 충분히 하는 것들입니다.
컴공 교육의 어떤 커리큘럼이나 교육의 질 등의 문제라기보다는, 학생이 그 교육을 제대로 수용할 수 없는 시스템이 문제인 것 같습니다. 사실 커리큘럼이나 강의자료, 강의 수준 들은 솔직히 국내 대학이나 외국의 유명 대학들이나 별반 다르지 않다고 봅니다. 뭐, 이것도 결국 전반적인 컴공 교육의 문제이긴 하네요.
그리고 computer science 학과 갓 졸업한 학생이 코딩 능력이 없다고 하는 것은, 실전 API 및 각종 framework, library 따위에 익숙하지 않거나, 각종 현업 도구에 익숙하지 않다는 얘기지요. 프로그래밍 기초 체력이 부족하면 안 되는거지요.
그게 그사람의 수학적 능력이 떨어져서가 아니라, 수학과 커리큘럼 보시면 알겠지만 수학과의 큰 틀은 1학년 미적분학처럼 증명할것이 적고, 계산이 많은 류를 실제적으로 이용하는 분야보단
정의 -> 정리 -> 증명의 3단계 과정을 지속적으로 반복해가며 논리적으로 수학 체계를 쌓아가는 과정이기 때문에 그렇습니다.
미적분학에 나오는 수많은 정리를 가져다주면 증명 잘 하는 학생은 많을지언정, 문제 못푸는 사람 많습니다.
애초에 'IT업계 종사 = 컴공 = 소프트웨어 개발'이라는 생각을 버리셔야 합니다. 이런 생각 때문에 상대적으로 차별당하는 분야도 상당히 많습니다.
실전에서 문자열이라는게 1바이트 영문자만 있는 건 아니거든요. 각 국가별 독자적인 2byte 코드나, 언어에 따라 몇 바이트를 사용할 지 모르는 유니코드 문자열을 위와 같은 방법으로 뒤집었다가는 제.대.로. 문제가 터지겠죠. ^^
또한, 문자열 안에 종단자인 \0이 있다고 가정하고 strlen을 사용하는 것은 문자열 자체에 \0이 포함되어 있거나 혹은 buffer overflow 공격에 노출될 위험이 있지요. 아무리 간단한 코드라도 문자열 포인터를 받을 때는 처리해야 할 길이를 함께 받아 처리해야 합니다. (공격이란 원래 예상치 못한 부분을 찌르는 겁니다.)
낚인(?) 분은 많으신데 여러 경우를 고민해서 작성하신 분은 안계신듯.
제대로 동작하는 api 만드는 일이 쉬운 것만은 아니죠.
몇몇 분들은 고작 코딩 가지고 열폭까지 하시는데, 제대로 짜라고 한 것도 아니고 그저 이력서에 C라고 써있으니 어느 책에나 다루는 기초문제 내어본 것 뿐입니다. 뭘 이런걸 가지고...
사실 little이냐 big이냐 의, endian 문제도 고려해야 하고(만약 서버-클라이언트 환경에서 쓰일 경우), 말씀하신 \0값의 예외문제, 즉 버퍼 오버플로우에 대비한 것도 생각해야 하고.. 사실 사이즈를 받아 처리하는 것도 위험이 전혀 없진 않지요. 사이즈가 엉뚱할 수도 있으니까.. ebp와 esp를 체크해서 버퍼사이즈를 계산하고 문자열 사이즈를 받거나 널문자 위치를 찾아서 여하튼 문자열 사이즈가 버퍼사이즈 이상 넘어가면 오버플로우 위험이라 판단하여 널문자를 강제 삽입한다던지 뭐 이런 루틴도 있어야 할 겁니다.
원래 제대로 하려면 이것저것 생각할 게 많아지는 법이죠.
결국에는 C하고는 완전히....
C기본서에 필수적으로 들어있는 순환과 포인터를 이용하는 예제군요..
수상경력있는 분이 저렇게 코딩했다니 좀 충격이네요...
{
strcpy(str, "edcba");
}
<== 이 답이 정말로 끌리네요!!!
이렇게 프로그래밍 하신 분 사회생활 잘할 것 같습니다.
저건 컴공 교육에 대한 문제라기보다 기본적인 문법 지식이 헷갈렸을 수도 있다고 봅니다.
가령 비트 연산자나 static 구조체에 함수포인터 assign, 혹은 default bit 길이 설정하는 주로 리눅스 커널에서 많이 보이는 문법같은건 접해보지 않은 사람이라면 거의 모르겠죠. 하지만 조금 아는 사람이라면 알긴 하지만 확실히 기억나지 않아서 버벅댈 수도 있다는 말입니다.
코더, 프로그래머의 능력을 판가름하는건 제가 겪어본 바로는 언어에 얼마나 통달했고 말고의 문제가 아니라 책이든 뭐든 자료를 보고 이해해서 [중간에 나몰라라 관두지 않고 끝까지 해내보이는] 능력인것 같네요.