ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2018 LG CNS 코드 몬스터 후기
    잡다한 이야기 2018. 10. 21. 15:32
    반응형

    2018 LG CNS 코드 몬스터 후기

    저는 이번 하반기에 2018년도 LG CNS 코드 몬스터에 지원하였습니다. 개인적으로 오로지 알고리즘으로 평가한다는 모토가 좋았고 개인적으로, 스펙이 떨어진다는 생각을 했기 때문에 좋은 기회라고 생각하여 지원하였습니다. 그리고 이 글을 작성하던 시점에서 바로 어제 10/20일 날 2차 오프라인 테스트까지 시험을 보았고 코딩 테스트는 다 끝났기에 이 경험을 공유하고자 글을 쓰게 되었습니다. 우선 참고적으로 코드 몬스터는 다음과 같은 채용 절차를 가지고 있습니다.


    1. 온라인 테스트 (2018.09.22)
    2. 오프라인 테스트 (2018.10.20)
    3. 인적성
    4. 임원 면접

    간단하죠? ㅋㅋㅋㅋㅋ 일단 시험 문제에 대해서는 CNS의 자산이기 때문에 문제와 코드를 자세하게 공유할 수 없음을 알려드립니다. 대충 무슨 문제였다 정도만 공유할게요. 

    1차 온라인 테스트 (2018. 09. 22 토요일)

    온라인 테스트는 3시간 총 4문제로 구성되었습니다. 1번 문제는 전형적인 출전 순서 정하기 문제였습니다. 이 문제의 포인트는 역정렬입니다.ㅎㅎ 1번 문제랑 똑같은 알고리즘 문제로, 알고 스팟의 "MATCHORDER"란 문제가 있습니다. 여기서는 2개의 팀에 각 팀 별로 선수들의 레이팅이 들어있고 A팀의 최대 승수를 출력하는 문제인데, 이것을 활용하면 1번 문제를 간단히 해결할 수 있었습니다. 


    2번 문제는 좌표 평면에서 임의의 점들 들어있는 배열이 입력으로 주어지는데 N개의 최대 거리의 있는 점들을 구하는 문제였습니다. 이 문제는 그냥 단순 점과 점 사이의 거리를 구하는 공식만 알면 됩니다. 그 후 주어지는 좌표 평면에서 각 점들의 거리를 구한 후 내림 차순 정렬 후에 N개로 자르면 문제를 해결할 수 있었습니다.


    3번 문제는 아이템을 사용하는데 이 때 캐릭터의 공격력이 증가하고 체력이 감소합니다. 그리고 캐릭터들의 체력 정보를 알려주고 특정 조건이 주어질 떄 가능한 최대 공격력을 만들어내는 문제였습니다. 캐릭터들의 체력을 내림차순으로 정렬한 후에 저는 아이템: 아이템 번호 형태의 해시 맵을 만들고 그 후 조건에 맞춰서 아이템을 사용하고 그 번호를 배열에 저장하는 방식으로 풀었습니다.


    4번 문제는 전형적인 DFS 문제였습니다. 문제에서 부모-자식 간의 디렉토리 정보를 알려줍니다. 그래서 특정 디렉토리에서 다른 디렉토리에서 이동하는 횟수를 반환하는 문제입니다. 뭐 연결리스트로 풀었던 사람도 있었지만 저는 트리 형태의 계층 구조 또는 이동 여부를 묻는 그래프 문제들은 대부분 DFS, BFS로 푸는 타입이라.. 


    아무튼 이렇게 4문제를 3시간 이내에 다 해결하였습니다. 뭐 시간 효율성 생각 안하고 완전탐색으로 모든 문제를 풀었습니다. 그리고 그 결과



    이런 온라인 시험을 통과하였다는 메일이 왔습니다. ㅠㅠ

    2차 오프라인 테스트 (2018. 10. 20)

    오프라인 테스트는 위의 사진처럼 마곡역에 위치한 LG 사이언스 파크에서 이루어졌습니다. 실내는 사진 촬영이 불가하기 때문에 밖에서 건물만 찍었다는.... 



    시험 전에 CNS의 임원 한 분 께서 들어와서 여러분들은 1800명 중 뽑힌 100명이라고 자랑스러워도 된다는 격려의 말씀을 전하고 참가자들의 긴장을 풀어주었습니다. 100명이라고는 하는데 개인적으로 육안으로 확인했을 때는 한 70~80명 정도 인원이었던 것 같습니다. 참고적으로 알아둘 것이 시험 때 회사에서 준비해준 노트북과, 필기구만 사용할 수 있기 때문에 개인 노트북, 필기구 가져갈 필요 전혀 없습니다. 


    2차 오프라인  테스트는 3시간 30분 문제는 총 4문제로 구성되었습니다. 먼저 1번 문제는 입, 출력을 받아서 NxN의 2차원 그래프를 생성합니다. 이 그래프는 인덱스 별로 다른 인덱스에 시너지가 있는데 팀을 반으로 나누었을 때 최소 시너치 차를 출력하는 문제입니다. 즉 N=4라면 4X4 그래프가 만들어지고 각각 시너지를 저장합니다. 그래서 [(0 1) (2 3)] [(0 2) (1 3)] [(0 3) (1 2)]일 때 모든 경우의 수를 구해서 시너지 차의 최소를 구하면 됩니다.


    2번 문제는 입력으로 배열과 K라는 수가 주어지는데 해당 배열에서 본인을 제외한 배열 요소 - K <= x <= 배열 요소 + K 인 x의 개수를 구하는 것입니다. 즉 [1, 2, 3, 4, 5] 배열과 K=2일 때 각 배열은 다음과 같습니다. [2, 3, 4, 3, 2] 배열을 순회하면서 단순히 조건에 맞춰 개수를 구하고 리스트에 데이터를 넣어주기만 하면 됩니다.


    3번 문제는 최소 이동 거리 문제였습니다. 룩과 폰의 위치 정보를 담은 배열이 존재하는데 폰을 다 잡기 위해서 룩들을 최소 이동 거리가 몇인가에 대한 문제였습니다. 룩이 (1, 1)일 때 (2, 2) 위치에 있는 폰을 잡기 위해서는 x로 +1 y로 +1 움직여야 하기 때문에 최소 2를 움직여야 합니다. 그래서 각 룩에서 폰들의 거리와 몇번째 폰인지를 저장하고 최소로 움직이는 폰을 잡는 방식으로 해결하였습니다. 


    4번 문제는 패턴 문제입니다. "K" "L" "M" "K" ? 이 때 패턴은 K - L - M 입니다. 그래서 ? 나올 문자는 L이지요. 사실 이 문제를 KMP 알고리즘이나 접미사 트리를 이용하여 패턴을 해결했어야 했는데.... 그냥 단순히 테스트케이스만 통과하도록 알고리즘을 짰습니다. ㅠㅠ 


    1차 온라인 시험을 시간 복잡도 상관 없이 완전 탐색으로 풀어도 통과했기에 2차인 오프라인 시험 역시 정확도 위주로 완전 탐색을 돌렸습니다. 따라서 시간 복잡도를 점수로 주어지지 않는다면 1, 2, 3은 어느 정도 확신은 있는데 4번 문제는 테스트 케이스가 어느 정도까지 판별하는지 싸움이 될 것 같습니다. 

    느낀점.

    사실 코딩 시험으로 본선까지 올라온 경험이 별로 없어서 긴장을 많이 했습니다. 그래서 자신이 없네요.. 코딩 외적으로는 LG,, 대기업은 좋구나였습니다. 하하하 이런 부상품도 주더라고요.



    그리고 교통비 3만원까지! CNS에 입사해서 더 좋은 후기를 포스팅 할 수 있기를 간절히 기원합니다!

    +결과

    10/23일 발표가 났습니다. 아쉽게도 참패했습니다. 아무래도 만점 컷이 아닌가 싶어요. ㅠㅠ 엘지 안녕... 잠시나마 설레였어

Designed by Tistory.