3 분 소요

나도 다른 블로그를 돌아다니며 이것저것 본게 많았어서 여기에 써본다. 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 할때 이 처리 많이해었는데 하필 오늘은 기억이 안나는거다. 이 돌머리 ㅠㅠ

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

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

여튼, 결론은…

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

한번 더 실기시험 기회를 얻은 분도 있는것 같던데 혹시나 나도 기회가 된다면 한번 더 도전해보고 싶다.

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

댓글남기기