-
우아한 테크캠프 6기 코딩테스트 후기 및 팁기타 2023. 5. 9. 16:15
2023 우아한 테크캠프 6기 코딩테스트 후기 및 팁
이 글은 준비 없이 급하게 우테캠을 지원하면서 습득했던 정보들과 시험을 보면서 느낀 점 등을 이야기합니다. 짧게 쓰려고 했는데 길어졌네요. 팁만 궁금하신 분들은 문제 항목과 팁 항목만 읽으시면 시간을 아끼실 수 있겠습니다.
우테캠과의 조우
기존에 우아한 테크코스에 대해서는 알고 있었는데요. 우아한 테크캠프는 잘 몰랐습니다. 들어본 적은 있지만, '우아한 테크캠프가 진화(?)해서 우아한 테크코스가 된 거 아냐?' 정도로 생각하고 있었어요. 근데 알고 보니 인턴쉽이었습니다.😅
취준 중 갑작스레 만나게 된 단비와 같은 우테캠... 신청하지 않을 수 없겠죠. 프로그래머스를 통해서 신청할 수 있었기에 일단 신청부터 누르고 뭘 준비하면 좋을지 찾아보았습니다.진행 과정
조건 같은 것은 딱히 없어서(학생이라면 졸업예정자, 해외여행에 결격사유가 없는 자(왜요?🤔)라면 누구나 신청 가능) 과정에 대해서만 잘 알아두면 됩니다.
우테캠은 1차 테스트(코테) - 2차 테스트(과테) - 서류 - 면접의 총 4단계로 진행되고, 각 단계마다 합/불이 있어서 패스된 인원만이 다음 테스트로 넘어가는 식입니다.
그럼 각 단계의 결과는 언제 나오냐. 저도 1차만 보고 아직 결과가 나오지 않은 시점입니다. 수집한 정보 상으로는, 3-4일이 걸렸다고도 하고 2주가 넘게 걸렸다는 분도 계셨습니다.
하지만 1차만큼은 3-4일이면 나오는게 맞는 것 같아요. 왜냐면 1차와 2차 사이의 기간이 일주일 밖에 안되는데, 결과를 안 알려주면 시험을 볼 수가 없게 될 테니 말이죠!😝그래서 1차 시험은 어땠고 어떤 내용들이 나왔나
문제를 자세히 읊게 되면 바로 소송을 당할 수 있기 때문에🥶 카테고리와 특징, 주의사항 정도만 적어두려고 합니다.
문제는 총 네 문제, 3시간 동안 진행됐습니다. IDE, 공식문서, 구글링, 안돼요. 손노트 활용만 가능합니다. 테케 통과 여부는 알려주지만, 정답 여부는 알려주지 않습니다.
1번부터 차례로 정리해 볼게요.문제 1
- 카테고리 : 그리디...라고 하기에도 민망할 정도로 매우 간단한 수준.
- 난이도 : 백준 실버4 / 플그 Lv1
- 특징 : 그냥 요구사항대로 정렬하여 값을 꺼내주면 되는 매우 간단한 문제. 플그의 수많은 Lv1 문제들을 만나보셨다면 어렵지 않게 푸셨을 것 같습니다.
- 주의할 점 : 문제 이해하는 데에 오래 걸리는 사람들은 힘들었을 듯 합니다. 왜냐면 그게 바로 나예요😭... 문제 읽는데 30분, 푸는데 5분... 그런 문제였습니다. 대다수는 아무리 길게 잡아도 10분 컷 하셨을 것 같아요. 달리 말하면, 실버4 정도의 문제는 그냥 보고 바로 적어내실 수 있는 수준만 되시면 됩니다.
문제 2
- 카테고리 : DP
- 난이도 : 골드3 / Lv3(또는 어려운 Lv2)
- 특징 : 누가 봐도 DP라는 것을 알기 쉽게 던져주었습니다. 진짜 전형적인 DP인데, 그래도 조금 더 복잡했습니다. 지금 생각나는 비슷한 문제는, 백준 DDR 문제를 푸실 정도면 쉽게 푸셨을 것 같습니다.
- 주의할 점 : 어떤 문제든 일단 먼저 완탐으로 풀고보는 분들이 계신데(부분점수라도 받으려는 목적으로) 아마 그러신 분들은 시간 낭비를 하지 않으셨을까 싶습니다. 완탐으로는 절대 풀리지 않을 문제였습니다. 거꾸로 말해서, 문제를 읽고 원하는 바를 유추할 수 있을 정도로 준비를 했나 보는 것처럼 느꼈습니다.
문제3
- 카테고리 : 시뮬레이션
- 난이도 : 골드5 / Lv3(또는 어려운 Lv2)
- 특징 : 무난한 구현 문제였습니다. 준비했다면 누구나 '한번쯤은' 접해봤을 법한... 비슷한 문제를 풀어보고 싶다면 백준 문제집에서 삼성a형 쪽을 뒤져보시면 될 것 같습니다.
- 주의할 점 : 흔히 말하는 '빡구현' 문제의 쉬운 버전 같은 느낌입니다. 구현 로직의 난이도 자체는 낮지만, 빡구현 문제를 싫어하셔서 준비를 많이 안해보신 분들은 무참히 맞을 수밖에 없습니다. 네. 그게 바로 나예요😭😭😭...... 못 풀 정도는 아니기 때문에, 다른 문제들을 빨리 풀고 시간을 최대한 확보해서 이런 유형의 문제로 진입하시면 되겠습니다.
문제4
- 카테고리 : MST...라고 하더라고요? 크루스칼 어쩌구... 저는 그런 어려운 용어는 몰라서... 평범한 탐색으로 풀었습니다.
- 난이도 : 사람마다 난이도 체감이 컸던 문제. 그러나 저는 실1-골5 / Lv2 정도로 느꼈습니다. 어렵게 느끼신 분들은 골3-4 정도로 보셨던 것 같아요.
- 특징 : 탐색으로 안 풀린다고 하시는 분들이 계시던데 저는 탐색으로 풀었습니다(왜 안풀리지?...아직도 모르겠습니다). 유니온파인드를 알고 계신 분은 아주 쉽게 효율적으로 푸셨을 것 같습니다. 포멀한 최소신장트리 문제들을 많이 접해보셨다면 무난하셨을 것 같습니다. 기존에 접해보았던 코테 문제들에 비해 테케가 그렇게 빡세지 않았어요(히든케이스가 있다면 그건 모르겠지만).
- 주의할 점 : 딱히요. 문제 자체도 많이 볼 수 있었던 유형이고, 지문 자체도 원하는 바를 확실히 전달해줬습니다.
팁
문제를 풀다 보면서 생각난 것들인데, 혹시나 우테캠 7기가 열려서 지원하시는 분들이 계시다면 꼭 적용했음 좋겠다 싶은 팁이 있었습니다.
첫째. 로그 읽기 연습
문제가 생겼을 때 IDE가 떠먹여주지 않아도 어디서 뭐가 문제였는지 로그 텍스트만 읽고서 찾을 수 있어야 합니다. 로그가 영어 메시지이고, 사람에 따라 불친절하게 느낄 수도 있죠. 저도 영어 1도 못합니다. 하지만 평소에 로그 메시지를 읽어보려고 했다면 절대 낯선 문구들이 아닙니다. 메시지가 정확히 어떤 의미인지는 몰라도, 오타 때문인지 import문 누락인지 로직 오류인지 바로 깨달을 수는 있어야 합니다.
둘째. 빨리 쓰기 & 빨리 찾기 연습
당연한 소리를 한다고 생각하실 수 있는데, 맞습니다. 타자 빠르면 당연히 좋죠. 근데 저처럼 손이 느린 분이라면, 모든 문제에서 반복적으로 사용할 만한 문장은 손에 완전히 새겨두시는게 좋습니다. 적어도 아래의 문구 정도는 말이죠.
import java.util.*; import java.util.stream.*; // 그리고 System.out.println("value: " + value);
디버깅툴이 제공되지 않기 때문에 입출력 손버깅을 해야 합니다. 그렇다고 값만 찍으면, 찍어야 할 값이 여러개가 되는 순간 뭐가 뭔지 모르게 됩니다. 그래서 '라벨 + 변수'과 같은 식으로 출력을 해주시면 손버깅에 이롭습니다.
그럼에도 손이 정 느리신 분은 이런 식으로 메서드를 빼두시면 유용합니다(저는 이렇게 했어요).void test(String label, Object value) { System.out.println(label + ">>> " + value); } void testArray(int[] value) { // 문제에 주로 int배열이 나오기 때문에 int[] 타입을 썼습니다. System.out.println(Arrays.toString(value)); } // 또는 탐색 문제에 자주 쓰이는 2d array void testArray2(int[][] value) { // 여러 배열을 찍으면 매우 헷갈립니다. 구분선을 넣어주면 손버깅 가독성이 좋아집니다. System.out.println("--------------------"); for (int[] v : value) System.out.println(Arrays.toString(v); }
이런 식으로, 자신만의 손버깅 전략 & 시간 단축 전략이 필요합니다.
셋째. 엣지케이스는 못찾더라도 코너케이스는 돌려봐야지
이건 꼭 지켜주심 좋을 것 같아요. 테스트가 정답 여부를 알려주지 않기 때문에 사용자가 알아서 유의해야 합니다. 잘 돌아간다고 제출하고 끝내지 마시고 코너케이스를 꼭 직접 돌려보세요!
플그는 테스트케이스를 사용자가 추가할 수 있습니다. 물론 숨겨진 히든 엣지케이스를 찾는건 많이 풀어본 사람의 머리에서만 튀어나오는 것이고, 그런걸 찾아야 한다는 당연한 말을 하는 건 아닙니다(저도 그런건 잘 못해요).그러나 요구사항대로 잘 짠 것 같은데도 아주 작은 넘버의 테케부터 통과가 안된다면, 주어진 조건의 최소조건들을 가지고 임의의 테케를 추가해보세요. 아주 작은 코너케이스에서 걸리고 있을 확률이 있습니다.
테케 중~후반에서 통과가 안된다면 주어진 조건의 최대조건들을 입력값으로 넣고 돌려보세요.기본으로 주어지는 테케들은 '통상적으로 떠올릴 랜덤값을 입력했을 때 나올만한 결과들'뿐입니다. 예를 들어 '1 <= 파라미터 < 100,000'와 같은 입력조건이 있다면, 테케로 주어지는 파라미터는 아마 37, 52, 1004, 3306 따위가 될 겁니다. 이번 문제 중에도 그런 문제가 있었는데요. IDE를 돌렸거나 정답여부를 알려줬다면 누구나 쉽게 통과했을 문제가 있습니다. 하지만 코너케이스를 넣어보지 않은 분이라면 아마 높은 확률로 해당 문제는 틀리셨을 거라고 생각합니다.
마지막으로 다시 한 번, 잘 돌아간다고 제출하고 끝내지 마시고 코너케이스를 꼭 직접 돌려보세요!이건 좀 애매한데... 그래도...
이건 제 의견은 아닌데요. '풀기만 하면 됐지'스러운 코드로 짜지 말라고 조언해주신 분이 계셨습니다. 근데 그 분이 이제... 그곳의... 임직원...🫠..
팁이라고 하기에 조금 애매했던게, 이건 평소에 어떻게 풀어버릇 했냐가 그냥 그대로 나오는 것 같긴 해요. 나중에 포스팅하려고 쟁여놓은 주제인데, 코테 문제 풀 때 깔끔한 코드 짜는 연습하기가 매우 좋습니다. 시간적 여유가 많으시거나 혹은 '나는 같은 문제라도 깔끔한 코드로 통과하고 싶어' 하시는 분들이 계시다면 기존에 연습할 때부터 좋은 코드를 어느 정도 염두에 두며 짜보세요.정리
이렇게 보면 '뭐야? 쉽나 보네?'란 생각이 드실 수 있어요. 하지만 현명한 여러분들께서는 타이슨 선생님이 전해주신 교훈을 잊어선 안되겠습니다. 누구나 처맞기 전까진 그럴 듯한 계획이 있죠😇...
한 문제(1번)를 제외하고서는 지문도 요구하는 바를 명확하게 표현해주는 편이었습니다. 그래서 더욱, 문제를 많이 접해본 사람과 아닌 사람의 난이도 체감 차이가 극명했겠단 생각을 했습니다.저는 문제 풀이를 따로 충분히 풀어보지 못했고, 또 시간 분배에도 실패를 해서 반타작 밖에 못했습니다(두 문제 제출하고 한 문제 풀다 제출했습니다).
하지만 열심히 하시는 분들에게 더욱 좋은 결과가 있었음 해서 조금이나마 도움될 만한 부분들을 모아 이렇게 정리를 해보았어요.개인적으로 'DP 점화식을 진짜 기계처럼 주루룩 짤 정도로 연습을 해둘걸' || '빡구현 문제를 좀 열심히 해둘걸'이라는 후회를 하긴 했지만, 게으름 피워서 안한게 아니고 다른 공부들과의 순위에서 밀려 소홀했던 것이기 때문에 엄청나게 아쉽지는 않습니다. 가진 것에서 최선을 다했다! 그런 느낌이네요.
개인적인 예상 합격솔은 3솔입니다. 혹은 문제의 의도를 잘 알고 푸셨다면 2솔합도 있지 않을까? 하는 생각이 드는 정도입니다. 코테 직후 대화 나누면서 보니 2솔 하셨다는 분이 많았습니다(음... 아마... 위의 코너케이스...를 걸리신 분들이 꽤 되시지 않을까...싶지만...). 1솔은 확실히 좀 어려울 수 있겠다 싶습니다.
코테 결과가 아닌 다른 무엇을 함께 판단기준에 넣는지는 모르겠지만, 문제 난이도와 결과만 생각해보면 그럴 것 같다 싶었어요.말이 자꾸 길어져서 그만 줄여야겠네요. 저나 여러분이나 합격되면 당연히 좋겠지만 이곳이 아니더라도 열심히 해서 목표에 한걸음씩 나아가면 좋겠습니다!
어찌됐든 즐겁게 개발을 하는 것이 중요한 거 아니겠어요?! 😇추가 : 3솔?... 응 올솔합 🥲......
'기타' 카테고리의 다른 글
갑자기 프로젝트 바람이 돌아서 (3) 2022.12.16 openssl로 crt/pem 인증서를 p12로 변환하고 tomcat에 설치하기 (0) 2022.10.24 질문답변: DTO를 만들 때 왜 HTTP Method별로 따로 만들어야 하나요? (0) 2022.10.22 어제는 프로젝트 발표일이었다. 코드스테이츠 백엔드 부트캠프의. (2) 2022.10.13 대략적인 서버 구성 (0) 2022.08.25 간단한 사용법: Java/Selenium과 함께한 자동로그인(이라고 쓰고 삽질이라고 읽는 것) (0) 2022.08.05