ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소프트웨어 마에스트로 12기 합격 후기
    일기장 2021. 4. 2. 23:07

    세상에.. 전혀 기대하지 않았던 기쁜 메일이 왔다.

     

    스코페 2차를 참여하고 싶었으나 면접일정과 완전히 겹쳐서.. 치킨도 못받고 합격도 못하면 정말 슬플 것 같았는데 치킨보다 더 좋은 소식이다.

     

    프로젝트 경험이 부족한 입장에서 SW마에스트로 합격하기까지의 과정을 공유해보고자 한다.

    프로젝트 경험이 없어도 충분히 합격 할 수 있다!!

     

     

    0. 서류접수

    자기소개를 비롯하여 약 5개의 문항에 대해 400자 이상 자신이 해왔던 경험, 프로젝트를 설명하면 된다.

    제일 중요한 것은, 여기서 쓴 내용들이 면접때 부메랑이 되어 날아올 수 있다는 것이다!!!!!

    나는 사실 1차코테만 뚫자는 마인드로 400자만 채워서 제출하고 어떤 내용을 썼는지 까맣게 잊고 있었는데..

    여러분은 면접까지 갈 수 있다는 자신감을 가지고 최대한 본인에게 유리한 방향으로 정성을 다해서 쓰는것을 추천한다.

    (다행히 나는 자소서 관련한 면접질문을 받지 않았다.)

    서류접수 후 1차 코테까지 1달 넘는 시간이 주어진다. 

    1. 1차 코딩테스트

    12기 기준으로 1차 코딩테스트에 알고리즘 6문제, SQL 1문제, 웹 1문제가 출제되었다.

     

    알고리즘 문제들의 경우, 알고리즘 경험이 없어도 하드코딩으로도 충분히 해결 가능한 난이도로 출제되었다.

    나는 대회준비를 하는 중이라 쉽게 구현 가능한 세그트리까지 사용했으나, input 값이 굉장히 작아서 완전탐색으로도 전부 풀 수 있는 난이도였다.

    SQL의 경우 정보처리기능사 정도의 지식수준만 있으면 해결 가능하다.

    웹의 경우 CSS만 다루어보았어도 충분히 해결 가능했다.(하지만 난 다루어본적이 없어서 못풀었다..)

     

    1차 코딩테스트는 말 그대로 아주 기초적인 코딩능력을 테스트하는 것으로, 여기서 통과를 못한다면... 조금 더 실력을 쌓아야 할 것이다.

     

     

     

    2. 2차 코딩테스트

    2차 코딩테스트의 경우 1차 이후 약 2주 뒤에 진행이 되었다.

    알고리즘 3문제, SQL 1문제, 웹 1문제가 출제되었다.

     

    여기서 특히 알고리즘 문제의 경우 면접때 질문이 날라올 가능성이 높다.

     

    그래서 알고리즘을 어느정도 해야 하는지 한번 적어보려 한다.

     

    알고리즘의 경우 bfs, dfs, 분할정복이 출제되었다.

    2-1. bfs 문제

    2차원 배열 지도가 주어지고, 출발 지점에서 특정 지점을 방문후 도착 지점에 갈수 있냐는 문제였는데,

    알고리즘 경험이 없다면 출발지점에서 특정지점 가는 경로를 한번 찾고, 특정지점에서 도착지점 가는 경로를 찾을 것이다.

    하지만, 결국 출발지점에서 도착지점으로 bfs를 돌리고 특정지점에 visted가 찍혀있으면 되는 문제이다.

    따라서 시간복잡도는 모든 노드를 방문하는 경우가 최악이므로 O(n^2)이다.( n * n 짜리 배열이 입력으로 들어온다.)

    면접때 답변하시는걸 들어보니.. bfs를 두번 돌리면 답이 나온다고 하는 분들도 있는데 2차 코테문제들은 면접 전에 한번 복기 하고 들어가야 한다.

     

    2-2. dfs 문제

    dfs인지 모르게 문제가 설계되어있다. 1차원 배열이 주어지고, 각 칸에는 여기서 몇번째 칸으로 이동 가능한지 써있다. 이걸 계속 타고가다보면 무한 loop를 돌게 되는 구간이 있는데, 그 무한 loop의 길이중 제일 짧은것을 출력해야 한다.(입력은 무조건 배열의 범위 안으로 이동가능하게 들어온다)

     

    사실 그래프 형식으로 문제가 나오면 누구나 dfs라는 것을 알 수 있겠지만, 단지 노드를 1차원배열로, 간선을 각 칸의 값으로 대체했을 뿐인데 여기서 시간이 오래걸렸다는 분들이 많았다. 

     

    단순 코테 통과용 알고리즘을 설명하면, 모든 점에서 한번씩 출발을 해 봐서 그때의 loop길이를 구하면 된다. loop 길이를 구하는 방법은 단순히 dfs의 depth를 이용해서, dfs타고 가는데 내가 이미 방문해서 지나온 정점을 만나면 현재의 depth - 그 정점에 기록된 depth라는 것을 알 수 있다.

     

    하지만 이런 경우는 O(n^2)이다. 만약 모든 배열이 바로 오른쪽칸으로만 이동하고, 배열의 맨 오른쪽 칸은 0번칸으로 이동하도록 설계되어있다고 하면, 하나의 출발지는 배열을 전부 순회하게 되고, 모든 출발지는 같은 루프 안에 있으므로 순회 n을 n번 하는 것이다. 이렇게 구현하면 면접때 질문이 날아온다. 실제로 나 빼고 모든 면접자들이 이 문제 더 최적화해서 풀 수 없겠냐고 질문을 받았는데.. 아무도 정답을 말하지 못했다. 

     

    위 알고리즘의 문제는, 중복방문이다. 이미 한번 탐색한 루트로 빠지는 경로에 합류하게 되는 경우, 더이상 탐색을 할 이유가 없다. 따라서 한번의 dfs가 끝날때, 이미 check했다는 것을 기록한다. 그렇다면 다음 출발지에서 또 출발을 하다가 현재 돌고있는 dfs를 만나면 지금까지의 loop의 최솟값을 갱신 가능한지 확인하면 되는거고, 그렇지 않고 이미 check된 곳을 만나면 더이상 dfs를 탈 이유가 없고 그냥 다음 출발지부터 다시 시작해보면 되는 것이다. 이렇게 하면 O(n) 알고리즘이 된다.

     

     

    2-3. 분할정복 문제

    이정도 난이도면 대회준비하는 인원이 아니고서야 확실한 solution을 말할수 없겠구나! 라고 생각이 들었다.

    n^2의 배열이 주어지는데, 땅을 정확히 절반씩만 챙겨가는 것을 반복한다. 이때, 그 챙겨가는 땅의 비용은 그 구간에 있는 모든 값들의 max이다. 이때 이 max의 합을 최대화 하는 문제이다.

     

    시간복잡도는 전처리시 O(n^4), 전처리 안하고 쌩으로 풀면 O(n^5)이다.

     

    이거같은 경우는 나를 포함한 모두에게 물어보았는데... 당시에 O(n^2 * 2^(log n^2)) 이어서 O(n^4)인 것을 생각없이 O(n^2 log n)이라고 했다... 집에와서 다시 계산해 보니 틀렸다는 것을 알았다. 하지만 나머지 면접인원들은 아예 대답을 하지 못했으나, 어쨌든 전처리하는 방법까지 설명을 했으니 조금 더 잘 보일 수 있었나보다 ㅋ.ㅋ

     

    2-4. SQL

    역시나 정보처리기능사 수준의 문제가 나온다. 

     

    2-5. 웹

    아.. 모르는 분야라 넘겼다.

     

    보면 알고리즘 문제들이 조금 어렵다. 단순히 기업 코테 뚫는 용으로 공부를 하면, 시간복잡도 최적화를 하기가 힘들다. 2차코테를 뚫고 과거의 프로젝트로 면접을 뚫으려면 상관이 없겠지만, 나처럼 알고리즘만 하면서 프로젝트를 만회하려는 인원들은 정말정말 알고리즘 문제 설명에 신경을 쓰고, 또 2차코테 당시에 최적화된 시간복잡도를 사용하여 문제를 풀어야 한다. 대충 solved 기준 플레 3 이상은 되어야 한다고 보면 된다.(2시간 꽉이 아니고 1시간 내로 알고3 + sql 솔브 기준) 평소에 알고리즘 문제를 풀더라도 최적화를 계속 하는 연습을 기르는 것을 추천한다.

     

     

    3. 면접

    면접은 한 타임당 4개의 방에서 진행되었는데, 방마다 면접 스타일이 전부 달랐다. 어떤 방은 코테는 전혀 물어보지 않고 과거 프로젝트에 관한 질문들만 한 방도 있고, 자소서에 관한 얘기만 하다 끝나느 방도 있다. 방 운이 조금 필요하다고 본다. 나는 프로젝트 경험이 다른 지원자에 비해선 부족하고 더구나 프레임워크쪽은 거의 모른다고 보는게 맞기에... 면접 준비하면서 굉장히 스트레스를 많이 받았다.

     

    하지만 내가 받은 질문들은 다음과 같았다.

     

    iot, 5G, 클라우딩컴퓨터, 인공지능, 빅데이터를 신체에 비유해서 설명하시오.

    만나고 싶은 팀원과 만나기 싫은 팀원은?

    소마를 꼭 해야하는 이유?

    과거에 진행했던 프로젝트를 상용화 하기위해서 어떻게 해야하는가?(다행이 어떤 프로젝트인지는 물어보지 않았다.)

    원하는 용어를 단 세문장으로 표현해 보아라.

    만나기 싫은 팀원을 만나게 되면 어떻게 할 것인지?

    본인이 좋아하는(자주쓰는 언어가 아닌) / 싫어하는 언어

    추후 활동계획

    코테 문제중에 아쉬웠던거, 더 잘 풀수 있었던거

    본인이 팀에 어떤 부분으로 기여를 할 수 있는가?

    마지막 하고싶은말

     

     

    자기소개는 하지 않았다. 하지만 자기소개/마지막 하고싶은 말은 반드시 준비해 가는것을 추천한다.

    특히 마지막 하고싶은 말은 본인이 이런 곳에 강점이 있다라고 하면 추가질문을 받아서 점수를 딸 수 있는 기회이다!

     

    질문간에 연결고리가 은근히 있는데, 계속 본인이 정한 방향으로 밀어붙이는것을 추천한다.

    소마를 꼭 해야하는 이유 - 추후 활동 계획 이라든가,

    만나기싫은 팀원 - 만나게 된다면 - 팀에 기여할 수 있는 방법 등 막상 긴장하면 놓치지만 연관된 질문들이 들어온다.

     

     

     

     

    면접이 중요하긴 하지만, 2차코테 점수도 굉장히 중요하다. 2차코테에서 점수를 많이 받아놓으면, 면접에서 조금 말려도 충분히 경쟁을 뚫을 수 있다. 면접의 경쟁률은 2대1이었다. 여기까지 와서 떨어지면 아쉬우니까..

     

     

    합격은 했지만 설렘 반 긴장 반이다. 당장 4월부터 프로젝트를 들어가는데, 시험기간과 겹치는데다 개발능력을 올리기엔 조금 짧은 시간이라 부담이 된다. 하지만 알고리즘 사냥꾼 답게 개발도 사냥을 시작해보겠다. 추후 시간이 된다면 소마 진행 내용도 올려보도록 하겠다.

    '일기장' 카테고리의 다른 글

    SPC 2022 후기  (1) 2022.12.01
    스코페 2021 1차코테 후기  (0) 2021.03.20

    댓글

Designed by Tistory.