조회 수 46224 추천 수 55 댓글 20
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
큐브리드 제품개발부 채용공고를 내면서 큐브리드 면접문제를 몇가지 예시로 보였는데, 관심있으신 분들이 있어서, 여기에 올려 봅니다. 답을 올려주시면 채용까지 이어질 수도 있으니... ^^ 참고로, http://www.okjsp.pe.kr/seq/95256 에 가시면 좀더 상세한 대화도 보실 수 있습니다.

================ 채용공고 ============================================

오라클과 경쟁하는 국산 DBMS 업체 큐브리드에서 실력있는 개발자를 구합니다.

회사와 제품 소개는 큐브리드 홈페이지(http://www.cubrid.com )와 홍보영상(http://www.cubrid.com/download/cubrid_intro.wmv )을 참조하세요.

학력, 연령, 성별, 경력, 전공에 관계없이 지원하실 수 있습니다.
단 3시간의 면접만 통과하시면 됩니다.
거의 대부분 지원분야의 핵심경쟁력을 검증하는 데 활용됩니다.

제품개발부서는 PM팀(프로그램 관리), 개발팀, QA팀으로 이루어져 있고,
- PM팀은 커뮤니케이션 능력, 결과 중심의 업무태도를,
- 개발팀은 문제 해결, 코딩 기술을,
- QA팀은 테스팅과 코딩 기술을 집중적으로 면접합니다.

아래에 팀별로 면접 질문 예제를 만들어 보았습니다.
원하는 팀의 질문에 "나는 이렇게 하겠다!"는 아이디어를 가지고 대화를 시작할 수 있습니까?
그렇다면, 저희 회사에 지원하셔서 실력을 보여주시길 바랍니다.


면접은 대화식으로 진행하여 정답 보다는 과정을 봅니다.
그리고, 인터넷에서 "Microsoft Interview Questions"을 검색하시면,
저희 회사가 면접에서 활용하는 문제의 대략 유형을 찾을 수 있습니다.

Joel Test에서 12점 만점을 유지하고 있는 큐브리드의 개발 프로세스.

실력있는 분이라면 대졸신입이라도 연봉 5천만원 드릴 수 있습니다.
회사홈페이지를 통하여 온라인지원하시기 바랍니다.

(PM팀)
1. 고객의 요구사항에 대하여 개발, QA, 기술지원팀의 입장이 첨예하게 대립할 때가 있습니다. 이럴 때 어떤 프로세스를 통하여, 어떤 기준으로 문제를 해결하겠습니까?
2. 큐브리드 고객이 배너광고 응용 개발을 위해 DBMS SQL에 무작위추출 (random sampling) 질의 기능이 있으면 좋겠다고 합니다. 어떻게 제품 명세를 만들겠습니까?
(개발팀)
1. tic-tac-toe 게임 모두 아시죠? NxN 보드 tic-tac-toe 게임을 개발하는데, 플레이어가 현재 놓은 위치가 게임을 끝내는지 아닌지를 판별하는 함수를 만들어 보세요. 예를 들어, bool IsWinningMove(int **board, int row, int column) 함수를 만드는 것입니다.
2. 전체 개수를 미리 알 수 없는 number stream에서 무작위로 1000개를 추출하려고 합니다. 추출된 것이 stream의 특정 지역에 집중되면 안될 것이고, 전체 개수를 미리 알 수 없으니, 전체를 디스크에 저장할 수도 없을 것입니다.
(시험팀)
1. 윈도우의 notepad의 save 기능을 시험하기 위한 플랜을 작성하여 보세요.
2. QA팀이 제품의 마지막 릴리스를 인증하는데, 개발팀에서 발생시킨 오류 때문에 인증기간이 늦어질 뿐만 아니라, 인증기간에 대한 예측성이 떨어져 릴리스 일정관리가 힘들어지고 있습니다. QA팀으로서 개선안을 제시해보십시요.
  • ?
    진창훈 2007.05.04 20:22
    저 문제를 못풀어도 가르치면 쓸만하겠다라고 생각된다면 채용하기도 하나요?
    알고리즘쪽은 약해서 문제가 상당히 어렵네요 ^^;
  • ?
    진창훈 2007.05.04 20:34
    갑자기 난 생각인데 게시판 하나 만들어서 http://www.okjsp.pe.kr/seq/95256 처럼 묻고 답하면서 채용할때 도움되게 하는것도 괜찮을듯 싶네요.
  • ?
    김평철 2007.05.04 22:07
    진창훈님, 예, 문제는 예시일 뿐입니다. 배우는 속도, 열정 등이 훨씬 중요합니다. 어차피, 우리는 배우면서 큽니다. 개발자가 어제 푼 문제를 오늘 또 풀지 않지요. 그것이 개발의 매력이기 합니다. 따라서, 저희는 현재의 전공/학력보다 가능성을 높이 평가합니다. 지원하시길 바랍니다.
    아, 그리고, 두 번째 댓글의 아이디어 감사합니다. 그렇지 않아도, 이런 코너를 만들어, 채용의 새로운 방법으로 정착시키는 것을 생각하고 있었습니다.
  • ?
    진창훈 2007.05.04 22:37
    아직은 저런 문제 합격하기엔 공부를 더 해야할것 같구요...^^;;;
    제가 채용공고를 다른 개발자 사이트에도 올렸는데 다들 재밌겠다, 지원하고 싶다라는 반응을 보이네요 ^^;

    모쪼록 모든 개발자들이 원하는 회사로 거듭나시길 바랍니다 ^^
  • ?
    박광배 2007.05.04 22:59
    두번째 것도 함수를 만드는 것인가요?
    저도 지원하고 싶지만 합격할지는 미지수이지만 한번 도전해 보고 싶습니다. 평소에 이런 부분에 대해서 별로 해본적이 없어서요^^
  • ?
    진창훈 2007.05.05 01:07
    이 글때문에 각종 개발자 사이트, db사이트 마다 난리네요 ㅋㅋㅋ
  • ?
    김평철 2007.05.05 07:10
    예, 나도 방금 네이버에서 검색하니 여기저기 관심이 엄청나군요. 이렇게 유능하고 열정을 가진 개발자들이 많은데, 아직 우리나라 SW 회사들의 개발자 조직문화는 걸음마 수준인 것을 보면 저희도 각성해야 한다는 생각이 듭니다. 좋은 경험이었습니다.
    진창훈님, 박광배님, 꼭 지원하셔서 도전해보시기 바랍니다. 지금까지 보여준 열정만으로도 한단계 통과입니다. ㅎㅎㅎ
  • ?
    관리자 2007.05.05 21:33
    전화면접은 3시간의 정식면접 비용을 줄이기 위해 선택적으로 수행하고 있습니다. 이번에 모이게 될 이력서의 양에 따라 유동적으로 판단하게 될 것입니다.
  • ?
    PE 2007.05.06 07:17
    델마당에 달아주신 댓글 보고, 인턴쉽에 큰 관심이 있어서 그런데, 똑같이 채용 지원에 "인턴쉽 지원" 으로 지원하면 되는지요?
    아니면, 따로 다른 절차를 밟아야 하나요?
    개인적으로 DBMS 관계된 쪽으로 관심이 많습니다. 상당히 매력적인 분야라고 생각하고 있습니다.
  • ?
    김평철 2007.05.06 09:02
    예. 그렇게 하시면 됩니다. 특히, 자기소개서에 지원목적을 기술하시면 채용검토에 큰 도움이 될 것입니다.
  • ?
    박광배 2007.05.08 00:15
    CTO 께서 이렇게 직접 모든 사이트에 다 댓글을 달아주시는 거 보면 작은거 하나라도 소홀히 하지 않는 좋은 분위기의 회사 같습니다^^ 지원해서 같이 일하고 싶습니다.
  • ?
    archi 2007.05.10 04:26
    잡코리아를 통해서 몇 일전에 지원했었는데... 오늘 오후에 규브리드에서 전화면접을 봤으면 한다고 전화가 왔네요. :-)
    지원하신 분들은 다 온건가요? ㅡㅡ;
    제가 좋은 대학을 나온 것도 아니고, 프리만 한지라 경력 관리도 잘한 편은 아닌데.. 저에게 까지 연락이 온 것으로 보면...
    개발자 한명 한명에게 신경써 주시는 정성이 대단하십니다.
    초심을 잃지 않는 큐브리드가 되었으면 합니다. ^^

    오후에 시간적인 여유(?)가 있어서 javascript 버전으로 "tic-tac-toe"게임을 간단하게 만들어 보았습니다.
    게임 만든다고, 퇴근 시간이 30분 딜레이 되었네요. ㅋㅋ
    소스 복사해서 html파일로 만들어서 실행하면 됩니다.

    소스 ------------------------------------------------------------------------------------
    <html>
    <head>
    <title>tic-tac-toe</title>
    </head>
    <body>

    <script>
    var isGameOver = false;
    var isOrder = true;
    var borderSize = 0;

    function gameStart() {

    isGameOver = false;
    borderSize = f.boardSize.value;
    var inner_html = "<table border=''1'' width=''"+(borderSize*20)+"'' height=''"+(borderSize*20)+"''>";

    if ( isNaN( borderSize ) ) {
    return ;
    }

    for ( var i=0; i<borderSize; i++ )
    {
    inner_html += "<tr>";

    for ( var k=0; k<borderSize; k++ ) {
    inner_html += "<td width=''20'' height=''20'' id=''_" + i + k + "'' onClick=''boardClick( this," + i + ", " + k + " )''> </td>";
    }

    inner_html += "</tr>";
    }

    board.innerHTML = inner_html + "</table>";
    }

    function boardClick( pointOBJ, row, col ) {

    if ( pointOBJ.style.background != "" || isGameOver )
    {
    return ;
    }

    if ( isOrder )
    {
    pointOBJ.style.background = "black";
    isOrder = false;
    }
    else
    {
    pointOBJ.style.background = "red";
    isOrder = true;
    }

    if ( isWinningMove( pointOBJ.style.background, row, col ) )
    {
    alert ( pointOBJ.style.background + "가(이) 승리하였습니다." );
    isGameOver = true;
    }
    }


    function isWinningMove ( bg, row, col ) {

    // 가로 검증
    if ( isWinningMoveRow( bg, row, col ) )
    {
    return true;
    }

    // 세로 검증
    if ( isWinningMoveCol( bg, row, col ) )
    {
    return true;
    }

    // 대각선 검증
    if ( isWinningMoveVirgule( bg, row, col ) )
    {
    return true;
    }

    return false;
    }

    function isWinningMoveRow ( bg, row, col ) {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( row ) + String( i ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    function isWinningMoveCol ( bg, row, col ) {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( col ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    function isWinningMoveVirgule ( bg, row, col ) {

    var isI = true;

    if ( row == col )
    {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( i ) + ".style.background") != bg )
    {
    isI = false;
    }
    }

    if ( isI )
    {
    return true;
    }
    }
    if ( ( borderSize - 1 ) == ( row + col ) )
    {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( borderSize-1-i ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    return false;
    }
    </script>

    <form name="f">
    <li /> 크기 : <input type="text" name="boardSize" value="5" />
    <input type="button" onClick="gameStart();" value="Game start..." />
    </form>

    <div id="board"></div>

    </body>
    </html>
  • ?
    김평철 2007.05.10 09:34
    후니님, 이미 말씀드린 바와 같이 전화면접은 선택적입니다. 모든 접수에 대하여 채용결과를 통지하니 좀 더 기다려 보심이 좋을 것 같군요.
  • ?
    박광배 2007.05.10 21:10
    어제 전화면접 봤습니다. 처음 보는 전화면접이어서 많이 버벅거리고 생각도 잘 안떠오르고...
    그래도 후회는 없습니다. 제가 할 수 있는 범위내에서는 다 했습니다. 기술적인 질문을 받았을때 인터넷을 검색해보고 책을 뒤져서 대답해보고 싶었지만 그런 것은 비겁한 것 같아서 저의 능력 한도내에서 대답했습니다. 어떤 결과가 나오더라도 받아들일 것입니다.^^
  • ?
    진창훈 2007.05.16 04:28
    박광배님, 결과나오면 저한테도 알려주세요 ^^;
  • ?
    kkong 2007.05.25 21:06
    시험팀에 관심을 가지고 있습니다. 그런데 코딩실력은 반드시 필요한건가요? 전공은 개발이지만 주로 품질쪽이나 외적 부분과 관련된 업무를 주로 해와서.. 코딩쪽은 잘 모르는데... ^^; 그래도 도전해 볼 수 있는건가 해서요 ^^
  • ?
    김평철 2007.05.26 09:47
    시험팀도 개발팀과 마찬가지로 코딩실력은 보유하고 있어야 합니다. 다만, 개발팀도 그렇듯이 면접에서 특정 언어를 요구하지는 않습니다. 어떠한 언어든 하나의 프로그래밍 언어로 고급 수준의 코딩 실력을 갖추고 있다면 다른 언어로 같은 수준의 코딩실력을 갖추는 것은 한달도 걸리지 않기 때문입니다.

    또 한가지 말씀드리고자 하는 것은 저희 시험팀은 90% 이상 자동화 시험에 의존합니다. 따라서, 시험팀의 업무는 시험을 수행하는 것이 아니라, 자동적으로 시험을 수행하는 프로그램을 개발하는 것이 주업무입니다. 이러한 이유로 코딩실력은 매우 중요하다고 할 수 있습니다.

    또 한가지 말씀드릴 것은, 큐브리드는 지금 당장 활용 가능한 기술을 가진 인력보다는 성장가능성에 더 높은 비중을 둡니다. 따라서, 면접은 열정, 배우는 속도, 문제 해결 능력 등에 집중하게 됩니다. 코딩실력도 같은 맥락에서 판단하게 될 것입니다.
  • ?
    후니 2007.05.30 07:13
    OKJSP에 나온
    확률을 이용한 문재 2번 풀이법에
    확률은 어디까지나 확률에따라 분포가 좌우되니
    어느정도 분포를 보장받는 방법을 한번 생각해 봤습니다.

    선택 위치에대한 조정을 하면
    분표 편차를 좀더 줄일수 있을거 같지만
    뭐 그정도까지는 할 필요 없을듯 해서
    이정도에서 만족해야겠습니다.

    import java.util.Arrays;
    public class StreamDistribute
    {
    static int array_range = 1000;
    static int stream_range = 200000;
    static long min_mid = -1;
    static int min_pos = -1;
    static long num_stream = 0;
    static long num_array [] = new long[array_range+1];
    static long mid_array [] = new long[array_range-1];

    public static void main(String[] args)
    {
    System.out.println("Hello World!");
    distribute();
    // printNum();
    // printMid();
    averageMid();
    }
    static long getNum(long num){
    return ++num;
    }
    static void distribute(){
    long temp_num = 0;
    num_array[0] = num_stream;

    for (int i=1;i<array_range+1 ;i++)
    {
    num_stream = getNum(num_stream);
    num_array[i] = num_stream;
    }
    num_stream=getNum(num_stream);
    initMid(-1, -1);
    //printMid();;
    for (int i = (int)num_stream;i<stream_range+1 ;i++ )
    {
    //System.out.println(i+"번째 입력,입력수: " + num_stream+" ");
    temp_num = num_stream - num_array[num_array.length-2];
    //System.out.println("temp_num = num_stream - num_array[num_array.length-2] : "+temp_num+" = "+num_stream+" - "
    //+num_array[num_array.length-2]);
    //System.out.println("temp_num>min_mid " + temp_num+">"+min_mid+" "+(temp_num>min_mid));
    if (temp_num>min_mid)
    {
    initArray(num_stream,temp_num);
    }

    for(int j = 1;j<num_array.length;j++)
    {
    //System.out.print(num_array[j]+",");
    }
    //System.out.println();
    //printMid();;
    //System.out.println();
    num_stream=getNum(num_stream);
    }
    }
    static void initMid(int pos,long min){
    if(pos<0){
    for (int i = 0;i < num_array.length-2;i++ )
    {
    mid_array[i] = num_array[i+2]-num_array[i];
    }
    min_mid = 2;
    min_pos = array_range-1;
    }
    else{
    for (int i = pos-2;i < num_array.length-2;i++)
    {
    if(i>-1){
    mid_array[i] = num_array[i+2]-num_array[i];
    //System.out.println(i+": "+ mid_array[i]+",");
    }
    }
    //System.out.println("min : "+min);
    long ll_temp = num_array[num_array.length-1];
    for(int y = mid_array.length-1;y>-1;y--){
    if(mid_array[y]<min){
    min_pos = y+1;
    min_mid = mid_array[y];
    break;
    }
    else if(mid_array[y]>=min&&mid_array[0]>=min){
    //System.out.println(ll_temp);
    if(mid_array[y]>ll_temp){
    for(int z = y;z>-1;z--)
    {
    if(min_mid>mid_array[z]){
    min_pos = z+1;
    min_mid = mid_array[z];
    ll_temp = min_mid;
    //System.out.println("gg");
    continue;
    }
    }
    break;
    }
    else if(mid_array[y]==ll_temp){continue;}
    else {
    min_pos = y+1;
    min_mid = mid_array[y];
    ll_temp = min_mid;
    //System.out.println("gg");
    }
    //break;

    }
    }
    //System.out.println("min : "+(min)+", min_pos : "+min_pos+", min_mid : "+min_mid);
    for(int z = mid_array.length-1;z>-1;z--)
    {
    if(min_mid>mid_array[z]){
    //System.out.println(z);
    //printMid();;
    System.exit(1);
    }
    }


    }
    }
    static void initArray(long num,long temp){
    int pos = min_pos;
    //System.out.println("min_pos : "+min_pos);
    for (int i = min_pos;i < num_array.length -1 ; i++)
    {
    num_array[i] = num_array[i+1];
    }
    num_array[array_range] = num;
    initMid(pos,temp);
    }
    static void printMid(){
    for(int j = 0;j<mid_array.length;j++)
    {
    System.out.print(j+":"+mid_array[j]+", ");
    }
    System.out.println(" mid_array");
    }
    static void printNum(){
    for(int j = 0;j<num_array.length;j++)
    {
    System.out.print(j+":"+num_array[j]+", ");
    }
    System.out.println(" num_array");
    }
    static void averageMid(){
    long avg = 0;
    for(int j = 0;j<mid_array.length;j++){
    avg+=mid_array[j];
    }
    avg = avg/mid_array.length;
    System.out.println("평균 편차 : "+avg+", 기대 편차 : "+ (stream_range/array_range*2));
    Arrays.sort(mid_array);
    System.out.println("최소 편차 : "+mid_array[0]+", 최대 편차 : "+mid_array[mid_array.length-1]);
    }
    }
  • ?
    후니 2007.05.30 10:07
    참 길게 느껴진 2주였습니다.
    결과도 나왔고
    문재들에대한 궁금증도
    마침 다 해소가 됬네요.

    좋은 사람 뽑으시길 기원합니다.
  • ?
    TaewooKim 2024.11.11 15:27
    17년 전이지만 문제가 재미있어서 남겨봅니다.(이미 okky 의 댓글들을 본 뒤 작성했습니다.)

    개발팀 문제
    ------------------------------------------------------------------------------------
    1번
    너무 간단해서 뭐지 싶었는데, okky 사이트에서 O(1) 를 얘기하셔서 좀더 고민해 봤습니다.
    우선 예시로 넣어준 함수는 board 의 각 요소에 접근을 하지 않으면 승리 여부를 알 수 없기 때문에 해당 signature 로는 O(1) 이 불가능할거 같습니다.
    따라서 새로 놓여질 때 마다 빠르게 확인할 수 있는 어떤 정보를 최신화 하면서 유지해야 하는 방법을 사용해보았습니다.

    1. NxN 보드에서 각 행, 열, 대각선마다 int 값을 가집니다. 이 값은 0으로 초기화 되며 O가 놓으면 행, 열, 대각선(대각선 위에 없으면 pass) 의 값을 1 증가 시키고 X 인 경우는 1을 감소 시킵니다.
    2. 새로 놓았을때 행, 열 대각선 중에 어떤 값이 N 혹은 -N 이 되면 승리하게 되고 그렇지 않은 경우는 계속 진행합니다.

    이 경우 i, j 에 놓았을 경우 해당 행, 해당 열, 해당한다면 대각선의 값만 수정하면 되는데, 이는 최소 2, 최대 4개의 값을 업데이트합니다.
    행, 열, 대각선은 array 와 같은 형식으로 관리를 하면 O(1) 로 접근과 수정이 가능하기 때문에 매 회차 놓을때 마다 O(1) 으로 승리 여부를 판단할 수 있습니다.

    추가로 판에 모두 놓았는지도 같이 알 수 있어야 진행 여부를 결정할 수 있기에 초기값이 N^2 에 해당하는 int 값을 놓을때마다 1씩 줄여가며 같이 판단하면 더 좋을 거 같습니다.


    ------------------------------------------------------------------------------------
    2번
    1. 스트림 순서대로 N개(1000개)를 모두 고릅니다.
    2. N개가 넘어가는 다음부터(m번째)는 다음 조건으로 선택을 합니다.
    - N/m 확률로 해당 요소를 선택합니다. 선택이 안되면 다음 m+1 번째 요소로 넘어갑니다.
    - 위 단계에서 선택되었을 시, 이미 뽑힌 N 개 중에서 임의로 1개를 뽑아 m번째 요소와 교체합니다.
    위와 같이 하면 과정을 거칠 때 마다 모든 뽑혀 있는 요소들이 N/m 확률로 뽑힌것을 보장합니다.
    (수학적 증명을 간략하게 얘기하면 N+1 번째 요소를 수행하면 모두 N/N+1 확률로 뽑은 것이 됩니다. m개들 중 N/m 확률로 N개가 뽑혔다는 가정하에 m+1 번째 요소를 N/m+1 확률로 뽑고 나머지 N개중 하나를 N/1 확률로 뽑으면 기존 N 개 요소중에 여전히 남아있을 확률은 (기존에 뽑혔을 확률) x (m+1번째 요소가 안뽑힐 확률 + m+1번째 요소가 뽑혔지만 교체당하지 않을 확률) = N/m x {(m+1-N)/m+1 + N/m+1 x N-1/N} = N/m+1 가 되고 새로운 m+1번째 요소 또한 N/m+1 확률로 뽑혔기 때문에 모두 같은 확률이 됩니다.)
    이러면 시간 복잡도는 O(M) 가 됩니다.

    parallel 버전)
    추가로 분할 정복 기법을 사용하면 parallel 하게도 작업이 가능합니다.
    i번째 worker 는 위와 같은 방식으로 N_i 개를 뽑습니다. 그러면 해당 worker 가 뽑은 요소들인 모두 N_i / M_i (M_i 는 각 worker 가 사용한 stream 크기) 확률로 뽑혔다고 볼 수 있습니다.
    모든 worker 들의 결과를 모으고 각 worker 가 뽑은 각 요소들의 확률 비율대로 다시 축소하여 N 개를 뽑습니다.

    이 방식에서 신경을 좀더 써야할 부분은 특정 worker 가 N_i 개를 뽑으려고 하는데 스트림이 N_i 보다 작을때 입니다. 이럴때는 모두 1의 확률로 뽑혔기에 뽑힌 확률을 1로 계산해줌으로써 해결할 수 있습니다.

    또 다른 문제는 N_i / M_i 가 N/M 보다 작을때 입니다. 이러면 해당 worker 에서 뽑은 요소들을 모두 사용해도 불공정한 선택이 되게 됩니다.
    이 문제는 N_i 를 모두 N 으로 설정하면 해결할 수 있습니다. 이렇게 되면 N x (worker 수) 만큼을 다뤄야 하지만, stream 처럼 얼마나 많을지 알 수 없는 상태는 아니기에 메모리를 얼마나 사용해야할지 결정할 수 있습니다.

    1. 각 worker 에서 N 개를 non-parallel 버전과 같이 추출 한다.
    2. 각 worker 에서 뽑은 항목들을 모아 m_i(혹은 N) 비율로 다시 추출한다.
    이러면 1번에서 뽑힐 확률은 N/m_i(혹은 1) 이 되고 2번에서 뽑힐 확률은 m_i/M(혹은 N/M)이 되므로 2단계 이후에도 남아있을 확률은 N/M 이 됩니다.


    참고
    1. okky의 김창준님의 답변을 보고 임의의 값으로 확장하여 작성했습니다.
    2. 난수 생성의 시간 복잡도는 O(1) 이며 확률 분포가 고르다고 가정하였습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
45 로그인 관련 2 사용자 2007.06.30 16222
44 한국의 개발자들, 오픈소스를 논하다 12 정병주 2007.06.29 17090
43 게시판 검색이 이상합니다. 1 손님 2007.06.13 17043
42 큐브리드 7.0을 설치하면서.. 1 나비스 2007.05.31 16380
41 웹사이트 오픈에 따른 개선사항 수렴합니다. 6 admin 2007.05.23 17080
» 큐브리드 면접 문제들... 20 김평철 2007.05.04 46224
39 Mysql 그리고 큐브리드... 1 들뿔 2007.04.11 45235
38 제로보드 XE의 개발 관련 진행 사항 공유 6 정병주 2007.03.16 17018
37 오라클의 이노베이스 인수 이후 '마이SQL'은? 6 정병주 2007.03.13 15648
36 제안합니다. 4 홍기선 2007.03.07 15315
35 그누보드 웹사이트의 큐브리드 게시판 생성 ^^ 5 정병주 2007.02.26 19946
34 소프트웨어 시장의 변화 SaaS (Software-as-a-Service)대하여 7 김수향 2007.02.16 18988
33 단일 문화의 비용 - The cost of monoculture 3 정병주 2007.01.30 14484
32 CentOS 기반의 큐브리드 RPM 버전 8 정병주 2007.01.29 18643
31 MMORPG "브리스톨탐험대" 티저 사이트 오픈 정병주 2007.01.27 14958
30 온라인게임용 DBMS로서의 큐브리드..? 2 정병주 2006.12.27 15501
29 CUBRID 에 바란다. 4 초보대왕 2006.12.26 13863
28 웹2.0 사이트, 국내엔 어떤 것들이 있나? 정병주 2006.12.13 14170
27 공개SW 유지보수 유료화 권고 정병주 2006.12.12 14494
26 cubsql 이라는 오픈소스 프로젝트를 시작했습니다 ㅎㅎ 8 신기배 2006.11.21 16424
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 Next
/ 14

Contact Cubrid

영업문의 070-4077-2112 / 기술문의 070-4077-2148 / 대표전화 070-4077-2110 / Email. contact_at_cubrid.com
Contact Sales

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

나눔고딕 사이트로 가기

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5