(사진은 정확한 (원본) 출처를 찾기가 힘들어 다음과 네이버 이미지 검색에서 찾아 게시했습니다. 혹시 문제가 되면 삭제하겠습니다.) 

하고 싶은데, 하지 못 할 때는 어떻게 해야할까?
마음과 정신으로는 반드시 할 수 있고 해 낼 수 있는데,
몸이 따라주지 않을 때...
나이가 들어서만 이런 현상이 일어나는 것은 아닌가보다.

그는 이번 경기를 통해 진정한 도전 정신이라는 것이 어떤 것인지 보여준 훌륭한 선수이다.
가슴에서 하늘로 뻗는 순간 왼쪽 다리가 뒤틀리며
들어올린 바벨을 그만 바닥에 놓고 말았다.
흔히 말하는 쥐가 난 것이다.
종아리 근육 경련으로 인하여 그의 꿈은 사라져 버렸다.

사용자 삽입 이미지
































경기장 내에서 간단히 치료를 하고, 대기실로 들어가 웃으면서 괜찮다고 말하는 그의 모습은
그의 욕심을 보여주었다.
선수라면 당연히 그런 욕심을 보일 것이다.
한참 여유를 가진 후 그는 다시 2차 시도를 하였으나, 무릎까지 들어올리다 다시 포기해야만 했다.
이쯤 되었으면, 3차 시도는 시도해 보지 않아도 불을 보듯 뻔하다.
근육 경련이라는 것이 단시간에 풀리는 것도 아님을 운동을 조금이라도 해 본 분이라면 알 터...
그러나, 그는 다시 3차 시도를 하였다.

사용자 삽입 이미지

... ... ... 그의 시도는 무리였다 ... ... ...
그러나, 그의 손은 바벨에서 떨어지지 않았으며 울부짖는 그의 모습에 눈물이 울컥하였다.

사용자 삽입 이미지

대기실로 들어오는 순간 머리를 쥐어 뜯으며 포효하는 모습은 나의 가슴을 후벼팠다.

사용자 삽입 이미지

2004 아테네 올림픽에서 은메달을 획득했었고,
이번 대회에서도 중국 선수와 금메달을 놓고 순항하였던 그였기에
그는 아쉬움이 많이 남았을 것이다.
아마, 이번 올림픽이 그에게 마지막이 될 것도 알고 있었어 더욱 더 그를 괴롭게 하였을 것이다.

그러나, 그는 줄곧 미소를 잃지 않았다.
진정한 승자에게서만 나오는 그런 미소를 그는 얼굴에서 내뿜고 있었다.

무리한 시도인 줄 알면서, 안 된다는 걸 알면서도 아름다운 도전을 나는 할 수 있을지 의문을 가진다.
지금의 나라면 기권을 했을 터인데...

이배영, 살인미소를 머금은 당신의 아름다운 도전을 기억하며 살아가겠습니다.








블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
(사진은 정확한 (원본) 출처를 찾기가 힘들어 다음과 네이버 이미지 검색에서 찾아 게시했습니다. 혹시 문제가 되면 삭제하겠습니다.) 

2008 베이징 올림픽을 앞두고 금메달 유망주에 대한 상세 보도들이 나오고,
그 중에 단연 박태환에 대한 프로그램이 많았었다.
나 또한, 박태환에 대한 관심도 최고조였고, 금메달을 획득하는 아침에도
목이 터져라 외치는 바람에 목이 약간 잠겼었다.
작년 호주 수영 대회에서 역주하는 모습에 우리 나라도 이제 수영 강국으로 발돋움하겠구나라는
막연한 기대감에 부풀어 있었고,
TV 프로그램에서도 박태환은 타고난 수영 천재이자 길들여지지 않은 야생마였다는 현 수영 대표팀 감독의 말도 있었다.
그가 보여준 것도 그가 타고난 수영 천재임에는 분명했다.
백인들의 전유물인 거처럼 여겨졌던 수영에서,
그것도 백인들의 체형에 비해 왜소한 그가 메달을 획득한 거 자체가 수영 천재임을 증명해준다.

키 182cm에 킥력의 원천인 발 사이즈도 275mm 이다.
수영신동으로 알려진 펠프스는 193cm에 발 사이즈는 350mm이다.
체격으로는 도저히 비교가 되지 않는다.

사용자 삽입 이미지

이런 불리한 체격 조건에도 그는 선전을 했고, 400m 자유형에서는 아시아 신기록을 세우며 금메달을 획득했고,
200m 자유형에서는 1등과는 2초 가까이 차이가 났지만, 또한 아시아 신기록을 세우며 은메달을 획득했다.
대한민국 뿐만 아니라, 세계가 놀란 사실이다.

천식 때문에 수영을 시작했다는 박태환...
그래서, 수영을 좋아했다.
그러나, 2004 아테네 올림픽에 출전하여 부정 출발로 홀로 실격을 당했다.
그것도 어린 나이인 만 15세.
마음에 상처가 굉장히 컸을텐데 박태환 또한 그 상처를 잘 관리를 했다.

사용자 삽입 이미지

TV 프로그램에서 다루었던 내용은
그의 실력을 최대한 끌어내기 위해 과학이 동원이 되고,
별도의 전담팀이 구성이 되고
최상의 컨디션을 유지하기 위함에 초점이 맞추어져 있었지만
난 다른 면을 보았다.

그는 천재라는 바탕에 분명 세계 1인자가 되기 위해 최선을 다하는 노력파였다.
자처하여 훈련량을 늘리고, 해켓과 펠프스의 역영을 분석하고...
분명 그는 최선을 다하는 노력파였다.

그러나, 그보다 더 눈에 띄는 것은 그 힘든 훈련량과 상처에도 불구하고
그는 분명 즐기는 모습이였다.
항상 웃으며, 농담하며 이 모든 걸 즐기는 모습이였다.

천재보다는 노력하는자, 노력하는자 보다는 즐기는 자가 최강자임은 누구나 알 것이다.

박태환은
천재적 기질을 바탕으로 무구한 노력을 하고, 그 노력 또한 즐기는 진정한 승자인 것이다.

물론, 한국 수영 역사상 메달권에 그것도 금메달과 은메달을 획득한 것에
전국민이 열광을 하고, 스포트라이트가 맞추어지는 것은 당연한 것이나,
그는 진정 자기에게 처해져 있는 모든 것들을 즐기는 모습 뒤에 얻어진 결과물에 스포트 라이트가 맞추어짐에 틀림없다.

비록, 박태환보다 잘하는 세계적 수영 신동인 펠프스가 존재하긴 하나,
4년 뒤 런던 올림픽에서는 정말 볼만한 경기가 될 것이다.

그의 파이팅 넘치고 즐기는 모습에 우리는 응원을 해야할 것이다.

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

(사진은 정확한 (원본) 출처를 찾기가 힘들어 다음과 네이버 이미지 검색에서 찾아 게시했습니다. 혹시 문제가 되면 삭제하겠습니다.) 

나는 남현희라는 존재를 2006년 도하 아시안 게임에서 알게 되었다.
혼자 떨어져 사는 홀아비 신세라 길고 긴 밤을 TV를 보며 지내던 때였다.
때마침 아시안 게임을 하던 때였고, 우연히 채널을 돌리다 펜싱 경기를 보게 되었다.
여자 펜싱 경기인데, 나의 시선을 주목하게 만들었던 것은 남현희, 그녀였다.
비인기 종목인 펜싱 선수 중에 저렇게 귀엽고 이쁜 선수가 있었다니..
그 당시 그녀의 나이는 25세였다.

나의 시선을 땡긴 것은 그녀의 외모였지만,
내가 그녀를 사랑하게 만든 결정적인 원인은 그녀의 자세였다.
153cm의 아주 자그마한 체구로 자신보다 10cm 이상 큰 선수들을 속도로 제압하는 모습에 반하게 되었다.
내친 김에 그녀가 나오는 단체전, 개인전 모두 보았다.

정말 대단하다는 말 밖에 나오지 않았다.
그녀는 성형 파문(쌍거풀 수술로 인해)에 휘둘렸지만, 잘 견뎌냈고
작은 키라는 불리한 조건에서도 엄청난 노력과 의지로 그녀의 갈 길을 걸어가는 모습을 보고
사랑하지 않을 수 없었다.

그녀가 포인트를 획득하고 치켜드는 손을 보면 나 또한 가슴이 뛰기 시작한다.
그녀의 고된 도전과 노력이 그 손에서 나오는 듯 하여...

그 이후 작년 2007년에는 세계 선수권 대회에서 1등을 했었고,
2008 베이징 올림픽에서는 랭킹 4위로서 이탈리아의 랭킹 2위 선수를 준결승에서 제압했고,
결승전에서 랭킹 1위 선수와 동등한 경기를 했었다.
3-0으로 지는 상황에서도 침착하고 당당한 모습으로 동점을 일궈냈었고,
그 이후 계속해서 몰아부치며, 5-5로 팽팽하게 나가다 마지막 4초를 남겨두고 1점을 내주며
아쉽게 은메달을 획득하게 되었다.

그러나, 이 또한 대단한 것이다.
한국 여자 펜싱 사상 처음으로 올림픽에서 메달을 획득한 것이다.

그녀는 그녀의 패배를 인정하며, 좀 더 배워야겠다고 불살랐다.
결혼도 올림픽에서 금메달을 따고 하겠다고 하여 4년 뒤 런던 올림픽 이후로 미루게 되었다.
그녀야 말로 진정한 승자이다.
그녀는 진정 아름다운 여자이며, 선수이며 나의 본보기이다..
멋지다!!!
사랑하지 않을 수 없게 만든다.!!!

4년 뒤 그녀의 아름다움이 올림픽에서 다시 한 번 발휘되는 날을 기대하며
그녀의 연인이고 싶은 마음을 다잡아 본다.

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

힙 (heap)

IT/알고리즘 2008. 7. 18. 16:06

1. Max Heap 소스

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 20
 
void print_arr(int arr[], int size)
{
        int i = 0;
 
 
        for( i = 1; i < size; i++)
                printf("%d ", arr[i]);
 
        printf("\n");
 
}
 
void swap(int *arr, int i, int j)
{
        int tmp;
 
 
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
 
}
 
void heap(int *arr, int n, int m)
{
        int i;
        int j, parent;
 
 
        for( i = 2 * n; i <= m; i+=2) {
 
                j = i;
                parent = j/2; // this is parent
 
                if(arr[j] < arr[j+1]) // this is children --> 자식 중에 큰 자식을 찾는다.
                        j++;
 
                if( j == m+1)
                        j--;
 
                while( arr[parent] < arr[j]) { // parent와 자식을 비교하여 자식이 크다면 바꿔준다.
                        swap(arr, parent, j);
                        j = parent;
 
                        if( j == 1)
                                break;
 
                        parent = j/2;
                } // while
 
        } // for(i)
 
}

int main(int argc, char **argv)
{
        int arr[SIZE], i;
 
 
        arr[0] = -1;
 
        for( i = 1; i < SIZE; i++)
                arr[i] = rand() % 100;
 
        printf("------------ input data -------------\n");
        print_arr(arr, SIZE);
 
        for( i = SIZE - 1; i >= 1; i--) {
                heap(arr, 1, i); // 제일 큰 놈을 제외한 나머지 요소들로 heapify한다.
                swap(arr, 1, i); // 제일 큰 놈을 뒤로 보낸다. --> 제일 작은 놈을 앞으로 보낸다.
        }
 
 
        printf("------------ sorted data -------------\n");
        print_arr(arr, SIZE);
 
        return 0;
 
}

2. Min Heap 소스
  Max Heap 소스에서 일부만 수정
        for( i = 2 * n; i <= m; i+=2) {
 
                j = i;
                parent = j/2; // this is parent
 
                if(arr[j] > arr[j+1]) // this is children --> 자식 중에 작은 자식을 찾는다.
                        j++;
 
                if( j == m+1)
                        j--;
 
                while( arr[parent] > arr[j]) { // parent와 자식을 비교하여 자식이 작다면 바꿔준다.
                        swap(arr, parent, j);
                        j = parent;
 
                        if( j == 1)
                                break;
 
                        parent = j/2;
                } // while
 
        } // for(i)

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
1. data가 char형인 binary search tree의 자료구조를 작성하라.
typedef struct BTREE {
     char data;
     struct BTREE *left, *right;
} BTREE;


2. 위 binary search tree의 preorder, inorder, postorder traverse를 프로그램하라.
int preorder(BTREE *t)
{
     if ( t != NULL) {
         printf("%c", t->data);
         preorder(t->left);
         preorder(t->right);
     }
}

int inorder(BTREE *t)
{
     if ( t != NULL) {
         inorder(t->left);
         printf("%c", t->data);
         inorder(t->right);
     }
}

int postorder(BTREE *t)
{
     if ( t != NULL) {
         postorder(t->left);
         postorder(t->right);
         printf("%c", t->data);
     }
}

3. swap_tree를 하나의 binary search tree에 대해 대칭이 되는 tree라고 정의할 때, 위 자료구조를 이용해서
   swap_tree를 프로그램하라.
int swap_tree(BTREE *t)
{
    BTREE *p;

    if( t == NULL)
        return NULL;
    else {
        p = (BTREE *) malloc(sizeof(BTREE));
        p->left = swap_tree(t->right);
        p->right = swap_tree(t->left);
        p->data = t->data;
        return p;
    }
}

4. 위 자료구조를 이용해서 tree를 복사하는 프로그램
int tree_copy(BTREE *t)
{
    BTREE *p;

    if( t == NULL)
        return NULL;
    else {
        p = (BTREE *) malloc(sizeof(BTREE));
        p->left = tree_copy(t->left);
        p->right = tree_copy(t->right);
        p->data = t->data;
        return p;
    }
}

5. 위 자료구조를 이용하여 tree의 max depth를 구하는 프로그램을 작성하라.
int max_depth(BTREE *t)
{
    int max = 0, depth;

    if( t == NULL)
        return 0;
    else {
         depth = max_depth(t->left) + 1;
         if( depth > max)
              max = depth;
         depth = max_depth(t->right) + 1;
         if( depth > max)
              max = depth;
         return max;
    }


}
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
a = b-a + (b=a)
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
** Exclusive OR 이용
    --> 양쪽 모두 같은 Bit는 0
          다른 한 쪽이 0 그리고 다른 한 쪽이 1의 비트는 1

int trans(int in)
{

    return (in ^ 0xffffffff) + 1;

}

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
소수(솟수) : 나머지가 0이 나오고 자기자신으로만 나누어지는 수
                예)  2,  3,  5,  7,  11,  13,  17,  19,  23,  29,  31,  37,  41,
                     43,  47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103,
                     107, 109, 113,  ...

#include <stdio.h>
int nextprime(int prime)
{
     int next, isprime, k;
     isprime = 1;
     if( isprime == 1)
         return 2;
     else if( isprime == 2)
         return 3;
     else {
         // 주어진 솟수에 2씩 증가시키며 솟수인지 테스트
        // 소수의 특성상 "2"를 제외한 끝자리는 항상 1, 3, 5, 7, 9 중에 하나이다.
         for( next = prime+2;   ; next += 2, isprime =1 ) {
               // 예) 소수 "13"의 반 값인 7이상으로 제산 연산할 의미가 없다.
               for( k = next/2; k >= 2; k--) {
                 if( next % k == 0 ) {
                     isprime = 0;
                     break;
                 }
             } // for(k)
             if( isprime == 1)
                 return next;
         } // for(next)
         return 0;
     } // else
}
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

<재귀 : pivot을 배열의 중간값으로>

void qsort(int a[], int left, int right)
{
        int p, t;
        int i, j;
 
 
        if( left < right) {
                p = a[(left + right) / 2];
                i = left - 1;
                j = right + 1;
 
                while(1) {
                        while(a[++i] < p);
                        while(a[--j] > p);
 
                        if( i >= j)
                                break;
 
                        t = a[i];
                        a[i] = a[j];
                        a[j] = t;
                }
                qsort(a, left, i-1);
                qsort(a, j+1, right);
        }
 }


<재귀 : pivot을 배열의 첫 번째 값으로>

void qsort(int a[], int left, int right)
{
        int p, t;
        int i, j;
 
 
        if( left < right) {
                p = a[left];
                i = left;
                j = right + 1;
 
                while(1) {
                        while(a[++i] < p);
                        while(a[--j] > p);
 
                        if( i >= j)
                                break;
 
                        t = a[i];
                        a[i] = a[j];
                        a[j] = t;
                }
                /* pivot 값을 교환 */
                a[left] = a[j];
                a[j] = p;
 
                qsort(a, left, j-1);
                qsort(a, j+1, right);
        }
 }

 ** 재귀 함수의 문제점
    배열이 아주 클 경우 스택 오버플로우가 발생할 위험
    --> 자체 스택을 만들어 비재귀하는 방식으로 개선
    --> 구간이 작을 경우 더 이상 재귀 호출을 하지 말고 선택 정렬이나 삽입 정렬 이용


<비재귀 함수>

#include <stdio.h>
 
#define MAX_NUM 50
int stack[MAX_NUM];
int top = 0;
 
void init_stack()
{
        top = 0;
}
 
void push(int i)
{
 
        if( top >= MAX_NUM) {
                printf("stack full\n");
                return;
        }
        else
                stack[top++] = i;
}
 
int pop()
{
 
        if( top == 0)
                return 0;
        else
                return stack[--top];
 
}
 
int is_stack_empty()
{
 
        if( top == 0)
                return 1;
        else
                return 0;
 
}
void qsort(int a[], int n)
{
        int p, t;
        int i, j;
        int l, r;
 
        init_stack();  
 
        l = 0;
        r = n - 1;
 
        push(r);
        push(l);
 
        while(!is_stack_empty()) {
                l = pop();
                r = pop();
 
                if( r-l+1 > 1) {  // 종료조건 :: 남아 있는 분할의 원소 개수가 1개 이상일 경우
                        p = a[r];
                        i = l - 1;
                        j = r;
 
                        while(1) {
                                while(a[++i] < p);
                                while(a[--j] > p);
 
                                if( i >= j)
                                        break;
                       
                                t = a[i];
                                a[i] = a[j];
                                a[j] = t;
 
                        }
 
                        // pivot과 i값을 교환
                        t = a[i];
                        a[i] = a[r];
                        a[r] = t;
 
                        push(r);     // 오른쪽 분할의 오른쪽 끝
                        push(i+1);  // 오른쪽 분할의 왼쪽 끝
                        push(i-1);  // 왼쪽 분할의 오른쪽 끝
                        push(l);     // 왼쪽 분할의 왼쪽 끝
 
                } // if
        } // while
 }

** 비재귀 함수의 문제점
    재귀함수에 비해 실행시간이 약간 빠르다. 그러나, push(), pop()을 사용하므로 함수호출에 의한 오버헤드
    현상으로 속도가 확 달라지지는 않는다.
    정렬된 배열과, 역순 배열에서는 그 속도가 40배 가량 느리다. ( O(n^2) )
    ?? 가장 큰 값이나 가장 작은 값이 pivot으로 되기 때문에 속도 저하
   --> pivot 값을 난수로 지정하는 방법


< 난수 발생>

int get_random(int range)
{
 
        return rand() % range;
 
}
 
 
 
void qsort3(int a[], int n)
{
        int p, t;
        int i, j;
        int l, r;
 
 
        init_stack();  
 
        l = 0;
        r = n - 1;
 
        push(r);
        push(l);
 
        while(!is_stack_empty()) {
 
                l = pop();
                r = pop();
 
                if( r-l+1 > 1) {
                        t = get_random(r-l+1) + l; // 난수 발생
 
                        p = a[t];
                        a[t] = a[r];
                        a[r] = p;
 
                        i = l - 1;
                        j = r;
 
                        while(1) {
                                while(a[++i] < p);
                                while(a[--j] > p);
 
                                if( i >= j)
                                        break;
 
                                t = a[i];
                                a[i] = a[j];
                                a[j] = t;
 
                        }
 
                        t = a[i];
                        a[i] = a[r];
                        a[r] = t;
 
                        push(r);
                        push(i+1);
                        push(i-1);
                        push(l);
 
                } // if
        } // while
}

 이 경우는 최악의 경우가 발생하지 않는다.


<삽입정렬 추가>

void insert_sort(int a[], int n)
{
        int i, j, t;
 
 
        for( i = 1; i < n; i++) {
                t = a[i];
                j = i;
 
                while( a[j-1] > t && j > 0) {
                        a[j] = a[j-1];
                        j--;
                }
 
                a[j] = t;
        }
 
        return;
 
}
 
void qsort4(int a[], int n)
{
        int p, t;
        int i, j;
        int l, r;
 
        init_stack();
 
        l = 0;
        r = n - 1;
 
        push(r);
        push(l);
 
        while(!is_stack_empty()) {
 
                l = pop();
                r = pop();
 
                if( r-l+1 > 200) {
                        t = get_random(r-l+1) + l; // 난수 발생
 
                        p = a[t];
                        a[t] = a[r];
                        a[r] = p;
 
                        i = l - 1;
                        j = r;
 
                        while(1) {
                                while(a[++i] < p);
                                while(a[--j] > p);
 
                                if( i >= j)
                                        break;
 
                                t = a[i];
                                a[i] = a[j];
                                a[j] = t;
 
                        }
                        t = a[i];
                        a[i] = a[r];
                        a[r] = t;
 
                        push(r);
                        push(i+1);
                        push(i-1);
                        push(l);
 
                } // if
                else
                        insert_sort(a+l, r-l+1);
 
        } // while
 }



삽입 정렬은 어느 정도 정렬된 배열에서 아주 큰 효과를 내기 때문에 사용...
메모리의 소모도 줄어듬...


<세 값의 중위>

void qsort4(int a[], int n)
{
        int p, t;
        int i, j;
        int l, r;
 
 
        init_stack();
 
        l = 0;
        r = n - 1;
 
        push(r);
        push(l);
 
        while(!is_stack_empty()) {
 
                l = pop();
                r = pop();
 
                if( r-l+1 > 200) {
                        t = (r+1) >> 1; // 나누기 2의 의미
 
                        if( a[l] > a[t]) {
                                p = a[l];
                                a[l] = a[t];
                                a[t] = p;
                        }
 
                        if( a[l] > a[r]) {
                                p = a[l];
                                a[l] = a[r];
                                a[r] = p;
                        }
 
                        if( a[t] > a[r]) {
                                p = a[t];
                                a[t] = a[r];
                                a[r] = p;
                        }
 
                        p = a[t];
                        a[t] = a[r-1];
                        a[r-1] = p;
 
                        i = l - 1;
                        j = r;
 
                        while(1) {
                                while(a[++i] < p);
                                while(a[--j] > p);
 
                                if( i >= j)
                                        break;
 
                                t = a[i];
                                a[i] = a[j];
                                a[j] = t;
 
                        }
                        t = a[i];
                        a[i] = a[r];
                        a[r] = t;
 
                        push(r);
                        push(i+1);
                        push(i-1);
                        push(l);
 
                } // if
                else
                        insert_sort(a+l, r-l+1);
 
        } // while
 
}


* 복잡도
 - Best Case
   T(n) = n + 2T(n/2)
          = n + 2(n/2 + 2T(n/4)) = 2n + 4T(n/4)
          = ...
          = n log n
 - Worst Case
   T(n) = n + T(n-1)
          = n + (n-1) + T(n-2)
          = ...
          = O(n^2)

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
아련한 옛 추억들이 떠 오른다.
97년, 98년 같은 연구실에서 꼴닥 밤을 지새우며 프로그램하던 선배의 모습이 아련히 떠 오른다.
그는 얼핏 보면 작은 사람이다. 머리도 크구, 체구도 작고...
그러나, 그를 아는 모든 이들은 그를 결코 작다고 하지 않는다.
썰렁한 유머 속에 그는 항상 천진난만한 표정을 짓는다.
그의 그런 모습을 좋아한 나의 동기인 연경이가 지금은 그의 곁에 동반자로서 길을 같이 걸어가고 있다.

<지방실업고 출신이 홍콩과기대 조교수로>

구미전자공고-대구대 졸업 김성훈씨
(서울=연합뉴스) 왕길환 기자 = 지방에 있는 구미전자공고와 대구대 전자공학과를 졸업한 김성훈(36) 씨가 최근 홍콩과학기술대학의 조교수에 임용돼 화제가 되고 있다.
김 씨는 7일 "내년 1월1일 홍콩과기대 컴퓨터공학과에 한국인으로서 처음 조교수로 부임한다"고 연합뉴스에 알려왔다. 그는 2006년부터 미국
매사추세츠공과대학(MIT)의 CSAIL(Computer Science and Artificial Intelligence Laboratory) 박사 후 과정에서 소프트웨어의 버그 예측과 예방에 대한 프로젝트에 참여했다.
조교수 부임에 앞서 서울대에서 6개월 코스로 박사 후 과정을 더 밟기 위해 1일 방한한 김 씨는 "연구도 계속하면서 이화여대에서 가을학기 시간강사로 일할 계획"이라며 "소프트웨어 공학에서 세계 최고가 되는 것이 목표"라고 말했다.
대구대 컴퓨터 응용연구실(현재
임베디드 시스템 연구실) 소속으로 세계 최초의 한글 로봇 검색엔진인 '까치네'(1995년)를 개발한 그는 벤처업체인 (주)나라비전에서 6년간 최고기술경영자(CTO)로 근무했다.
2000년 3월 미국으로 건너간 김 씨는
캘리포니아대(UC) 샌타크루즈에서 박사학위를 받았고, 지난해 소프트웨어 공학분야의 최고 학회인 ICSE(International Conference on Software Engineering)로부터 최우수 논문상을 수상했다.
김 씨는 "저의 조교수 임용 사례가 실업계고교와 지방대 학생들에게 힘이 됐으면 하는 작은 소망이 있다"고 말했다.
홍콩과기대는 영국의 '
더 타임즈'가 2007년 발표한 세계 우수대학 공학계열 23위에 오른 바 있다. 이 대학은 현재 컴퓨터 공학과에 316명의 대학원생과 44명의 교수진이 있다.
그는 미국 주립대학 2곳과 캐나다 대학 등에서도 임용 제의를 받았다

<출처 : http://media.daum.net/society/education/view.html?cateid=1012&newsid=20080707142116653&cp=yonhap>



김성훈(서울대 박사 후 과정), 강종백(핸디소프트 미국 지사)...
내가 소프트웨어 엔지니어가 되기 위해서 이 2 사람은 언제나 나의 선망의 대상이자
본받고 싶은 사람들이다.
"까치네"를 개발하면서, 강종백 선배는 어깨에 파스를 붙여가며 1주일을 거뜬히 밤샘하면서 프로그램을 했다는
일화를 연구실 들어가면서부터 지금까지도 듣는다.
연구실 석사 과정을 졸업하고, 핸디소프트에 근무하다 지금은 미국 지사로 옮기면서
미국 생활에 잘 적응하고 있다.

사용자 삽입 이미지
김성훈 선배에 대한 재미있는 일화도 있다.
3년 전에 내가 미국으로 갔다가 보고 싶어 UCSC를 찾아간 적이 있었는데 이런 얘기를 들려주었다.

사용자 삽입 이미지

한 번은 중국 유학생들이 모여 얘기를 하고 있더란다.
그래서, 선배도 그 자리에 가서 이런 저런 얘기를 서툰 영어로 얘기를 했단다.
그러나, 그때 모인 그 중국 유학생들이 2달 동안이나 선배를 아는 척을 하지 않았단다.
선배가 얘네들한테 무엇을 잘못했을까 고민을 하다 나중에서야 그 이유를 알았단다.
"아니, 저 놈도 중국 애 같은데, 왜 영어로 우리를 깔 보듯이 얘기하는거야?? 정말 재수없어~~"
푸하하하
이게 이유란다.
그러고 보니, 외국에서 본 그때 선배의 모습은 영락없이 중국 스타일이었다.

이 일화에서도 알다시피 그는 정말 보잘 거 없는 작은 외모의 소유이나,
그의 내적 능력은 어마어마하게 큰 거인이다.

사실, 지방대 출신으로서 그 위치에 오르기까지 얼마나 많은 고생을 했을까?
자신의 노력이 가장 중요하겠지만, 그가 잘 시작할 수 있도록 이끌어주시고, 늘 걱정해주시는
우리의 영원한 교수님(지금은 대구대 총장님)이 계셨기에 가능하지 않았을까라도 생각해본다.

사용자 삽입 이미지

매년 연구실 모임이 있는데, 지난 주말에 보고 나서 이들은 언제나 나를 행복하게 만드는 사람들이라는 생각을 하게 되었다.
사용자 삽입 이미지


참고로, http://www.kbs.co.kr/plan_table/channel/scr/index.html 이 사이트로 가시면
김성훈 선배님의 인터뷰 내용을 들을 수 있습니다.

'쩐의시대 > 살자, 빡시게' 카테고리의 다른 글

등 씻어주는 아들  (0) 2008.11.29
첫 번째 천사인 시형이가 날 울리다...  (10) 2008.09.08
조급증  (0) 2008.02.27
첫 번째 천사 (2004년 11월 19일)  (0) 2008.02.27
좋은 아빠  (0) 2008.02.27
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,