이스트소프트 실기시험 후기

나도 다른 블로그를 돌아다니며 이것저것 본게 많았어서 여기에 써본다. 2012년 9월 19일 실기시험을 치르고 왔다. 오늘본 시험이기에 지금은 뇌가 싱싱하니 이렇게 적어둔다. 아마 이 글은 내가 입사지원 결과가 최종적으로 나올 때까지는 공개할 수 없을 것 같다. 그 이후에 공개해야지.

혹시 이 문제를 공개하는 것에 대해 이스트소프트 관계자분이 문제를 제기하면 글은 내리겠다. 그런데 실기시험 문제지에도 문제를 외워서 공개하는 것에 대해서도 어떤 제한이 있다고 쓰여있진 않았으니 공개해도 될 것 같다.

오후 1시부터 6시까지 이루어진 실기시험. 딱 한문제 푸는건데 그게 그렇게 어렵다. ㅡㅡ;; 시험은 C/C++/PHP/Java가 가능하다. 노트북이 지급되었고 비주얼스튜디오2008과 이클립스가 설치되어 있었다. 난 비주얼스튜디오로 작업시작.

간단한 안내설명을 듣고 본격 프로그래밍 시작이다. 자기가 만든 프로그램은 이스트소프트에서 제공하는 검증프로그램으로 검증해볼 수 있다. 내가 만든 파일(.exe/.class/.php)을 지정하면 결과값이 제대로 나오는지 확인해준다. 이 프로그램을 쓰며 알게된건 검증프로그램이 총 6가지문제를 테스트 할 수 있도록 되어있었다. 이것은 곧 실기시험에 나오는 문제가 6가지 중의 하나란 얘기. 인터넷 여기저기를 찾아보며 기출문제 여섯가지만 다 풀어보면 실기시험은 무조건 패쓰 할 수 있다는 얘기가 된다.

내가 받은 시험문제는 다음과 같다. 시험이 끝날 때 시험문제지를 다 거둬가기 떄문에 적어온 것은 없고 내 머릿속에 기억해온 것만 적는다.

  1. 프로그램이 실행되면 문자열을 입력받는다.
  2. 문자열에서 2번 이상 반복된 같은 문자 혹은 문자열를 찾는다.
  3. M = (반복문자열의 문자수) X (반복수) 이며 M이 최대가 되는 반복문자열을 찾는다.
  4. M이 같다면 반복횟수가 더 많은 반복문자열을 출력한다.
  5. M이 같고 반복횟수가 동일하다면 앞에 나온 문자열을 출력한다.
  6. 만약 반복되는 문자열이 없다면 NULL을 출력한다.
  7. 입력되는 문자는 a~z, A~Z, 0~9 까지로 제한한다.
  8. 만약 유효하지 않은 문자나 빈문자가 입력된다면 프로그램을 종료한다.
  9. 표준 입출력만 이용해야하며 차후 커맨드라인으로 파이프라인을 써서 입출력을 할 수도 있어야한다. (예를 들어, test.exe < input.txt > output.txt 이렇게 사용가능해야함)
  10. 출력형식은 예제출력값의 형식과 동일해야한다.
  11. 입력되는 문자열의 길이는 100만개 이하라고 가정한다.

이러한 문제가 나오고 여기 조건에 맞도록 프로그램을 짜는 것이다. 예제 입력값과 예제 출력값도 나와있다.

예제 입력값 중에 기억나는 것 몇개.

  • 입력 – abcde 출력 – NULL
  • 입력 – 12aaaaaa 출력 – a:6
  • 입력 – ab12ab12abab1212 출력 – ab12:3

위 경우처럼 나와야한다. ‘반복문자열:반복횟수’ 식으로 나와야한다는 것이다.

채점은 프로그램은 일단 작동이 정상적으로 되어야하며 문제 조건에 맞는 수는 모두 처리 가능해야한다. 그리고 프로그램의 실행속도가 빠를수록 높은 점수를 받으며, 코드스타일, 알고리즘, 적절한 자료구조를 썼는가도 평가 대상이 된다.

내가 다섯시간 동안 풀어본 결과…

풀만했다. 아니, 결론은 풀 수 있다. 신입 수준에서 많이 어려운 것 같긴하다. 난 C++로 했고(사실 난 C++ 코드에다가 C 코드를 같이 섞어쓰는 버릇이 좀 있지만.) 거의 세시간 반정도 지나자 위 조건을 만족시키는 코드를 거의 다 짰다. 적절한 자료구조와 알고리즘을 쓰진 않은 것 같다. 사실 그런걸 고려할 수가 없었다. 이걸 다 풀 수 있을까?도 모르겠었고 일단 어떻게든 푸는게 더 중요했다. 어려운 알고리즘 없이 대상 문자열에 전수조사를 해가며 정답을 구하는 방법으로 했다. 지하철 타며 집에 오며 다시 생각해보니 적당한 자료구조(해쉬테이블 같은…)를 썼다면 좀더 좋지 않았을까 싶다. for문과 if문 그리고 간단한 함수 정도로 문제를 풀었다. 딱히 탐색알고리즘 같은것 없이 무차별로 검사하다보니 속도는 딱히 좋지 않은 것 같아서 아쉽다.

여튼 exe 파일형태로 작동했을 때 기대하던대로 잘 작동했고 예제 입출력과도 동일하게 작동했다. 그런데 문제는…. 검증프로그램으로 돌려보니 검증프로그램이 잘 작동하다가 멍 때린다. ㅡㅡ;; 왜 이럴까…하고 고민해보니 연속으로 입력을 받기 위해 while 루프 안에 코드를 작성했는데 데이터가 없는 경우(즉, 빈문자열인 경우) 처리가 안되던 것이다. 테스트해보니 내가 예상하던 부분이 문제가 맞았다. C++에서 엔터키나 빈데이터를 어떻게 처리했었지? 하고 기억해보니 기억이 안난다. ㅠㅠ 으악… 문제를 다 풀었는데 표준입출력이 안되서 한시간반을 매달렸다. 당최 이게 기억이 안나서 별의 별 코드(C++, C는 물론이고 심지어 MFC 문법까지도…쿨럭)를 다 만들어봤지만 결국에 이 부분을 못 만들었다. 정말 정말 아쉬웠다. 하필 내가 들고간 C++ 책에는 이 문제를 해결하는 방법이 없었다. 휴… 책을 골라도 하필 이상한 책을 골라왔나보다. 예전에 C 할때 이 처리 많이해었는데 하필 오늘은 기억이 안나는거다. 이 돌머리 ㅠㅠ

이런 문제를 문자열 패턴처리라고 하는 것 같은데 사실 이런 부분에 대해 고민해본적이 없어서 처음에는 어렵게 느껴졌다. 사실 유니코드 같은 문자열 인코딩 때문에 애먹은적 밖에 없었다.

여튼 핵심적인 문제해결 부분은 다 풀었고 출력 부분 때문에 제대로 작동하지 않은 것이고… 해당 부분에 간단하게 나마 주석도 달아놨으니 시험 검사하는 분도 이해해줄거라 믿고 한번 기다려봐야겠다.

여튼, 결론은…

처음에 이스트소프트 실기시험이 엄청 어렵다고 하길래 되게 겁먹었는데 해볼만했다. 문제를 보고 덤벼드는걸 좋아하는 분들은 적극 해보라고 권하고 싶다. 문제 해결이 처음에는 굉장히 어려워보이는데 작은 부분부터 혹은 본인이 할 수 있는 부분부터 만들어가며 해결해나가는게 도움이 많이 되는 것 같다. 내 경우에는 잘 기억이 나지 않을 때는 노가다 코드를 짜보고 여기서 일정한 규칙이 발견되면 정리해나가며 효율성을 올리거나 재귀함수로 만드는 등의 작업을 하는 스타일인데 이게 도움이 많이 되었다. 실제 저 문제를 푸는데도 이 방법으로 해결했다. 혹시나 나중에 이스트소프트 실기시험을 보러가는 분들은 알고리즘책을 다시 한번 보고 가는게 좋을 것 같다.

한번 더 실기시험 기회를 얻은 분도 있는것 같던데 혹시나 나도 기회가 된다면 한번 더 도전해보고 싶다. 이번엔 100% 만들어버리겠어!!!!!

 

2012년 9월 21일 추가 :: 결국 실기시험에서 탈락했다는 메일을 받았다. 내 실력을 스스로 평가해볼 수 있는 계기가 되었다. 나중에 혹시 더 해볼 수 있는 기회가 있다면 더 해봐야겠다.

8 Replies to “이스트소프트 실기시험 후기”

  1. 안녕하세요.
    이스트소프트 실기 지원했던 사람입니다.
    저도 C++로 지원했었는데요, 혹시 한줄을 띈다는게
    아스키코드값으로 엔터값을 체크하는 구문을 만들어 줘야하나요??

    1. 한줄 띈다기보다는 엔터처리 그러니까 더 정확히는 파일종료를 처리하는 부분을 만들어줘야합니다. 엔터를 감지해서는 안됩니다. 왜냐면 문제에서는 입력이 파일일 때에도 처리가 되어야하거든요.

  2. 파일형태의 입력도 처리가 되게끔 코드를 작성해야 하는거군요?
    제가 실기시험을 볼때는 파일입출력은 요구하지 않았었는데 생각해 봐야겠네요…

  3. 헉. 엊그제 보고 왔는데 이 문제였습니다 ㅡㅡ;;
    완전 똑같네요?!
    헐… 이거 풀어보고 갈걸…
    Testcase들에 대해서는 정상 작동했는데 뭐가 문제인지 셀프 진단 프로그램은 오류를 내뱉더라구요… 어후… ㅠㅠ input.txt에 대해서도 output.txt 가 제대로 됐는데…

    제가 뭔가 허점이 있었나봅니다… ㅠㅠ

    1. 아직 문제가 안 바뀌었나보네요. 제 기억이 맞다면 문제는 거의 이 글대로가 거의 정확할 겁니다. 제 기억력이 상당히 괜찮으니까요.

      아마 셀프진단프로그램을 통과 못하셨다면… 아쉽게도 탈락하지 않을까…하는 생각이 들긴합니다. 시험보기전에 이 글을 보셨다면 좋았을텐데 아쉽네요.

  4. 동범님 이 문제에서 요구하는 것중 하나가 100만개 이하의 문자열 입력인데요

    이게 스레드 없이 전체 조사 하는 형태로 하면 엄청난 시간이 걸리지 않나영?

    보통 천개 정도 돌리면 3초 정도 되는거 같던데 알고리즘 짜보니까

    답변 부탁드려요 ㅠ_ㅠ

  5. 저도 다 만들었는데 셀프체크에서 오류 나와서 탈락했어요…ㅠㅠ

    오류 나오는 이유가 도대체 뭘까요?? 동범님 말씀처럼 빈 문자열에대한 어떤 처리를 해줘야 할까요???

    많은 테스트케이스들에 대해서는 정상적인 output이 나왔는데 셀프체크는 오답이라고 하는 이유가 도대체 뭘까요?? ㅠㅠ

Leave a Reply

Your email address will not be published. Required fields are marked *