SW 마에스트로 15기에 합격했다!
1월부터 코딩테스트 부터 시작하여 약 두달 정도의 준비를 정말 열심히 했다.
사실 2차 코딩테스트가 끝나고 붙을거라고 생각을 하지 못해서 합격 문자가 오기까지 아무런 준비도 못했다..
하지만 이후 면접 준비에 올인한 결과 붙을 수 있었다!
이번 포스팅을 통해 나와 같이 면접에 어려움을 겪는 사람과 소프트웨어 마에스트로를 준비하는 사람들에게 도움을 주고자 내가 했던 코딩테스트 문제와 면접 준비 과정에 대해 공유하려고 한다.
이글을 보시는 여러분들도 모두 할 수 있습니다!
사실 1차 코딩테스트의 구체적인 문제에 대해서는 말할수 없지만 대략적으로 말하자면 일단 쉬웠다!
백준 골드5정도를 풀수 있는 수준이라면 모두 풀수 있다고 생각되는 문제였다.
하지만 문제가 쉬운만큼 개인적인 생각으로는 모든 문제를 풀어야 통과할 수 있다고 생각되는 코딩테스트였다. 그만큼 문제를 풀며 하나라도 틀리면 안된다는 압박감속에 테스트를 봤던 것 같다.
정말 단순한 구현문제였다. 수학적 연산식을 코드로만 구현할 수 있으면 풀 수 있는문제
주어진 직사각형에서 문제 조건에 따랐을 때 생기는 삼각형의 넓이 합을 구하는 문제다. 사실 나도 히든케이스가 테스트케이스에 없었다면 틀렸을 수 있다. (처음 테케 돌렸을 때 틀렸음)
하지만 그걸 감안하더라도 골드정도의 수준은 아닌것 같다.
주어진 String의 id(중복 불가능)와 class(중복가능)를 구분하고 각 명령문의 결과를 저장하는 문제이다.
정말 주어진 String에서 id와 class를 구분하고, 해당 id와 class를 어디에 어떻게 저장할지(자료구조)
저장된 값을 활용하여 명령어에 어떻게 사용할지를 고민했던 문제다.
주어진 값 자체가 아주 큰 값은 아니었던거 같아서 어렵지 않게 풀었던 것 같다.
단, 주어진 조건을 명확하게 이해하는 것이 중요한 문제다. 조건을 이해하지 못하면 무조건 틀리는 문제!
주어진 배열에 대하여 문제 조건에 따라 정렬하는 문제다. 이렇게만 말하면 정말 쉬워보이지만 조건이 생각보다 복잡해서 시간을 가장 많이(약 1시간) 사용한 문제다.
해당 문제 때문에 sql을 포기할 뻔 했다. 단순 그리디한 방법으로 풀게되면 무조건 시간복잡도에 서 문제가 발생하는 문제라서 어떻게든 시간복잡도를 줄일 수 있는 방법을 찾아햐 했다.
그래서 나는 종이에 가능한 모든 경우의 정렬 결과를 쓰고, 원하는 정답과의 차이점을 분석하며 문제를 풀이했다. 물론 이후 다른 사람들의 풀이를 보니 아주 좋은 방법은 아니라는 것을 알 수 있었다.
그저 단순히 min을 쓸줄 안다면 누구나 풀 수 있는 정도의 문제였다.
역시나 sql은 쉽게 나왔군 이라는 생각을 했다.
2차부터는 별다른 기대를 하지 않아서 큰 긴장감은 없었다. 나름 개인적인 일도 있어서 정상적인 컨디션으로 볼수 없기도 하였다 ㅎㅎ
그래서 그냥 맘편히 2문제만 풀자 라는 생각으로 접근했던 것 같다.
단순히 주어진 문자열을 조건에 맞게 정렬하면되는 정말정말 단순한 문제다.
과일이 시간별로 어디로 떨어지는지 주어진 배열에 대하여 주어진 이동 방향에 대하여 시간별로 구하는 문제다. 정말 백준의 자두나무 문제와 유사한 문제다. 물론 나도 풀어보지는 않아서 나름 고생좀 했던 문제다.. 2번부터 시간을 이렇게 쓰면 안되는데 라는 생각 때문에 정말 진땀흘렸다.
3차원 배열 dp를 사용해야하서 나름 그 연산 과정을 많이 고민했던 문제다. 그 연산에 대하여 식만 확실하게 구할 수 있다면 나름 빨리 풀수 있었을 것 같은 생각이 들었다.
정말 분할정복의 기초와 같은 문제다. 진짜진짜 분할정복이 무엇인지, 어떤식으로 동작하는지만 안다면 평소에 분할정복에 대한 코드를 몰라도 풀 수 있는 문제다.
<여기서 부터 풀이하지 못했다.>
0과 1로 이루어진 정사각형에서 어떤 2가지의 버튼을 눌러 모두 0으로 바꿀 수 있는 방법을 찾는것이 중요했다. 당연히 최소 횟수 방법을 찾아야 했지만, 문제 이해를 정상적으로 하지 못하여 풀이하지 못했다. 나중에 들어보니 주어진 정사각형을 열 또는 행 단위로 쪼개서 생각하면 풀 수 있는 문제라고 한다.
진짜 당연히 sql은 풀 수 있다는 내 생각을 완벽하게 부순 문제...
rank와 join을 사용하고, set도 사용하고.. 무튼 준비를 못한 나의 문제다. 정말 sql은 단순하게 과거 개념만 다시 읽어보고 시험을 봐서 어떻게 하는건지 이해하지 못한 문제다. 변수를 생성하여 열을 추가하고 해당 열어 필요한 데이터를 추가하고 등등 정말 이해 못할 방법이 많았던 문제다.
정말 코딩테스트에서 3문제 뿐이 못풀어서 붙을 것이라고 생각하지 못했다. 14기때 2차에서 떨어졌기 때문에 또 떨어질 것이라고 생각했다. 그래서 2차 합격 문자가 오기 전까지 기억에서 소마를 잊고 있었다. 하지만 2차 합격 문자가 온 순간 머리가 멍해지고 어떻게 준비하지 라는 생각을 하였다. 급하게 카카오톡 오픈채팅 소마 채팅방을 찾고 스터디를 구했다. 그러면서 다양한 면접 준비 질문을 찾아보고, 스터디를 하는 사람들과 공유했다. 특히 이번부터는 3분 스피치.. 그게 진짜 힘들었다. 3분이라는 시간이 길다면 길고 짧다면 짧은 시간이기 때문에 그 시간을 맞춰서 발표를 준비하는 것이 쉽지 않은 과정이었다.
(나름 3분 스피치를 잘해서 붙은것 같다고 생각한다.)
우선 꿀팁을 주자면 무조건 스터디를 참여해라!
거기서 공유되는 면접 질문과, 남들 앞에서 말을 해보는 연습은 정말 도움이 많이된다.
또한 면접관님들이 계속해서 포트폴리오를 앞에서 직접 확인하시는 모습을 보며 식은땀을 많이 흘렸던 것 같다.
우선 내가 받은 질문에 대하여 공유하자면 정말 우리 분과는 인성질문 0개 100% 포트폴리오 기반 질문이었다.
지금까지의 면접 과정이다. 다행이 붙었다!! 나 또한 포트폴리오를 준비하며 다양한 사람의 포트폴리오를 확인할 수 있었던 것 같다. 그래서 나의 이번 포트폴리오도 공유하고자 한다!
소마 포트폴리오
https://prairie-gallium-72c.notion.site/3e86efe6d89b44a9b60d843efa66c6f9?pvs=4