기록물 저장소/활동

[SW 마에스트로 12기] 2차 코딩 테스트 후기

모영이 2021. 4. 2. 18:11

문제가 될 시 삭제하겠습니다. 그리고 합격시 공개하겠습니다.

 

난이도를 붙였지만, 개인적인 의견이고 나대는 목적이 아니라 난이도를 공유하려고 함이고, 제가 소마 준비할때, 코딩 테스트가 어떤 난이도를 갖고있는지 아예 몰라서 이곳저곳 뒤져서 정보를 얻었기 때문에 대략적인 공부의 범위를 설계할때 도움을 받았던 것 같습니다. 설명회 때, 난이도 질문이 많이 나오기도 하고 공식적으로 난이도가 어떠어떠 하다를 답해주기 힘들기 때문에 공유하면 좋을 것 같다고 생각했습니다.

 

문제를 푸는 방법에는 여러 알고리즘을 사용할 수 있고 또 알고리즘을 사용하지 않고 애드혹 알고리즘 처럼 자신만의 참신한 방법으로 풀 수 있습니다. 정답 개수를 알려주지 않았기 때문에 제가 푼 방식이 틀렸을 수도 있기에 참고하실때 주의해주시면 될 것 같습니다.

 

문제 유형을 파악해보자면(틀릴 수도 있음..)

1번 문제 : BFS

2번 문제 : DP

3번 문제 : 분할정복

SQL : JOIN 사용

WEB : JS버튼 이벤트 함수

 

문제 수가 다시 5문제로 줄어들었다. 알고리즘과 SQL에 집중한 나에게는 지난 번 1차 테스트가 더 유리했지만, 이제는 아니었다. WEB을 조금 더 공부했지만 역시 풀지 못했다. 알고리즘 3문제와 SQL 1문제를 풀었다. 

 

개인적으로 난이도를 붙여보자면(백준 solved.ac 기준)

1번 문제 : 실버 2

2번 문제 : 실버 1

3번 문제 : 실버 1

 

1번 문제는 전형적인 BFS문제였다. BFS문제의 난이도는 백준에서 실버 1~3정도이다. 단순히 BFS만 하면 실버 3이고, BFS돌면서 무언가를 하면 실버 1~2정도인데, 무언가를 많이 하지는 않지만, 조건을 조금 고려해야해서 실버 3 난이도는 절대 아니라고 생각한다. 실버 1~2정도의 난이도라고 생각한다. 하지만 BFS 실버 3문제를 풀었다면 충분히 어렵지 않게 풀 수 있을 정도라고 생각한다.

 

2번 문제는 DP문제였다. 노골적으로 DP를 말하고 있었는데, 1차 코딩 테스트의 4번 문제 업그레이드 시킨 문제였다. 입력값의 범위가 정말 컸다. 하지만 DP로 풀지 않을 수 있었던게 제한 시간이 똑같이 1분이어서 범위가 그렇게 크더라도 시간초과가 절대 날 수가 없기 때문에 시간이 없다면 DP로 풀지 않아도 됐다고 생각한다. 하지만 정석으로 간다면 난이도는 실버 1 ~ 골드 4 사이였다. 참고로 면접 때 코딩테스트 질문도 하는데 DP로 풀지 않았다면 그때 DP로 풀면 시간복잡도를 크게 줄일 수 있다. 라고 말하면 되었을 거다. 나는 DP로 풀었다. 

 

3번 문제는 분할정복 문제였다. 지난 번 시험도 이렇게 냈는지는 모르겠는데 이 문제도 1차 코딩테스트 6번 문제를 업그레이드 해서 냈다. 처음에는 DP로 풀어야할거라고 생각했다, 모든 선택이 이어져있는 줄 알았다. 하지만 한번 실행할 때마다 그곳에서의 결과를 내고 다음으로 넘어가면 되기 때문에 DP가 아니었다. 결국에는 단순 백트래킹을 하면 되겠다 싶었는데, 분할정복이 좀 복잡하면 헷갈리기 쉽다. 인덱스의 범위를 계속 고려 해주고 종료 지점도 고려해야 하기 때문에 복잡할 수 있다고 생각한다. 하지만 백준 쿼드트리의 난이도가 실버 1이기 때문에 그것과 비슷한 난이도였다고 생각한다. 

 

SQL문제는 JOIN을 여러번 사용하는 문제였는데, 이어지는 컬럼을 유의하면서 풀면 금방 풀 수 있는 문제였다.

 

WEB문제는 또 할말이 없다. id값을 가진 dom객체를 가져오려면 getelementid?이걸 해줘야 하는데 우선 이것 조차 외우지 못했다. 

 

문제를 업그레이드 시켜서 내면 좋은 점이 문제 이해가 쉬워진다. 저번에 푼 문제기 때문에 문제를 읽어서 이해하는데 훨씬 가벼운 느낌이 들고, 긴장도 조금 사라지는 것 같았다. 원래 이렇게 하는지는 몰랐다. 그렇지만 1차 코딩테스트 끝나고 비슷한 문제 위주로 공부방향을 잡았다. 특히 위상정렬이 또 나오면 다음엔 맞춘다는 마인드가 생겼는데 아쉽게 나오지 않았다. 웹과 SQL을 확실히 풀 수 있는 사람이라면 알고리즘은 1문제를 맞춰도 합격할 수 있는 것 같다. 웹, SQL, 알고리즘 2개면 무조건 합격인 것 같다. 나는 SQL, 알고리즘 3 이렇게 합격을 했다.

 

코딩테스트 공부 방향을 정리해보자면 (참고만 하면 될 것 같아요!)

한 달 밖에 안남았다.

SQL : SQL무조건 맞춘다. 프로그래머스 SQL고득점 KIT & SQL ZOO에서 JOIN문제까지 다 풀기. 

알고리즘 : 풀 수있는 알고리즘 다 푼다. 백준 단계별 풀이 28번 Union Find까지 각 단계별 이해될 때까지 풀기. 편식 X

WEB : 웹을 버리거나 확실하게 공부하거나. 대충대충 공부한다면 절대 못 풀 것 같다. 알더라도 확실히 공부해야한다. 시간이 좀 걸리겠지만, html, css, js 모두 공부해야 한다. 하지만 포기하더라도 너무 걱정할 필요가 없다. 자신이 할 수 있는 것에 집중하는 것도 현명한 것이라고 생각한다.

 

한 달도 안남았다.

SQL : SQL ZOO JOIN문제까지 다 풀기.

알고리즘 : 백준 단계별 DFS & BFS, 그리디 먼저 다 풀고, 트리 문제 제외 나머지 1~3문제 씩 맛보기 풀기. 

WEB : 전략적 포기.

 

일주일 남았다.

SQL : SQL ZOO JOIN문제만 풀기 (JOIN 문제 안에 WHERE, ORDER BY, GROUP BY 다 있음)

알고리즘 :  백준 단계별 DFS & BFS, 그리디, 브루트 포스, 백트래킹 1~3문제 씩 맛보기 풀기.

WEB : 전략적 포기.

 

DFS, BFS, 그리디 이게 확률이 가장 높다. 브루트 포스와 백트래킹은 약간의 애드혹의 무기를 쥐어주는 느낌이다. 알고리즘을 정교하게 몰라도 깡으로 풀려면 노가다적인 코드를 짤 수 있어야 하는데 그게 브루트 포스와 백트래킹이다. 많은 도움이 됐으면 좋겠어서 열심히 적어본다.