[2021-02-03 추가] 풀이 영상 업로드합니다. 코드와 슬라이드 파일은 여기서 확인 가능합니다.
------
제 코드를 함께 남기고 싶지만 코딩테스트 진행중에 문의를 해보니 프로그래머스를 통해 공식적으로 문제가 공개되기 전에는 문제를 제외하고 자신의 정답 코드만 업로드하는 것도 허락하지 않는다는 답변을 받아서 자세한 풀이와 코드는 공식적으로 문제가 공개된 이후에 업로드할 수 있겠습니다.
대신 저작권을 침해하지 않는 선에서 총평을 해보면 일단 카카오의 코딩테스트는 확실히 굉장히 넓은 범주에서 출제되고 구현의 난이도가 상당함은 물론 요구하는 지식 또한 일부 문제는 학부 알고리즘 수업만으로 커버가 안됩니다. 물론 그렇다고 해도 어디까지나 코딩테스트이니 꾸준하게 PS 분야를 공부했다면, 구체적으로는 코드포스 기준 블루 상위권(대략 1800+)이면 그럭저럭 올솔브를 하거나 한 문제정도 삐끗할 것 같습니다.
하지만 알고리즘을 이전에 공부한 적이 없거나, 공부를 했더라도 삼성 A형 느낌의 시뮬레이션 문제만 계속 풀어보셨다면 이번 시험이 굉장히 어려웠을 것 같습니다. 지금 노베이스라고 칠 때 이정도 난이도의 코딩테스트에서 간신히 턱걸이로 통과를 해내는 수준을 넘어서서 합격을 장담할 수 있는 정도의 실력을 가지려면 뛰어난 재능을 가진게 아닌 이상 6개월 정도는 필요해보입니다.
또한 문자열 처리를 할 땐 python이 편한데 전반적으로 시간이 타이트할 것 같은 문제도 있어 C++이 필요할 것 같아보이는 문제도 몇 개 있었습니다(첨언하자면 정해로 풀었으면 python으로 짜든 C++로 짜든 통과될테지만 비효율적으로 구현했을 때 python로는 시간초과가 발생하지만 C++로는 통과되는 요행을 바랄 수 있습니다).
이제 문제를 한 번 짚어보겠습니다. 아래의 난이도는 백준 온라인 저지의 문제 티어를 참고해 제가 뇌피셜로 붙인 난이도입니다.
1번
알고리즘 분류 : 문자열, 구현
난이도 : B1-S4
곧이곧대로 구현을 하면 되는 문제였습니다. 웬만하면 파이썬으로 푸는게 정신건강에 이로워보입니다.
2번
알고리즘 분류 : 정렬, 브루트 포스
난이도 : S2-G5
구현 방법은 여러가지이지만 가능한 모든 조합을 만들어내고 C++ map 혹은 python의 dict 등을 이용해 개수를 세는 방식이 무난해보입니다. 구현 방향을 잘못 잡으면 코드가 산으로 갈 것 같습니다.
3번
알고리즘 분류 : 이분 탐색
난이도 : S2-G5
정확성은 아마 그냥 곧이곧대로 구현하면 받을 수 있을 것 같고 효율성은 미리 정보를 리스트에 다 담아둔 후에 쿼리가 들어올 때 마다 이분 탐색을 수행하는 방법으로 구현할 때 통과될 수 있습니다. 정보를 리스트에 담을 때 "적당한 처리"를 미리 해두면 매 쿼리마다 여러 리스트를 볼 필요 없이 한 개의 리스트만 보면 됩니다. PS 공부 경험이 많지 않다면 이 "적당한 처리"를 떠올리기가 힘들지 않았을까 싶습니다.
4번
알고리즘 분류 : 플로이드 or 다익스트라
난이도 : G5-G4
그래프 최단거리 문제를 조금만 풀어봤다면 문제의 풀이를 거의 보자마자 알 수 있고 그렇지 않더라도 플로이드 알고리즘 or 다익스트라 알고리즘을 알고 있었다면 코딩 테스트 시간 내에는 풀이를 유추해낼만 할 것 같습니다.
플로이드 알고리즘 혹은 다익스트라 알고리즘 3번으로 문제를 해결할 수 있고 n이 작기 때문에 마음 편하게 플로이드 알고리즘으로 구현을 하는게 나아보입니다. 중급(?) 알고리즘이 쓰여서 난이도는 G5-G4로 두었지만 플로이드 or 다익스트라를 안다는 가정 하에 2번, 3번보다 구현이 더 쉬웠습니다.
5번
알고리즘 분류 : 투 포인터
난이도 : G2
2017년 카카오 블라인드 채용 1차에 비슷한 문제가 있는데 그 문제에서 난이도를 엄청 뻥튀기해두었습니다. 구현 난이도도 그럭저럭 높았기 때문에 투 포인터를 몰랐다면 아예 손을 못댔을 것이고 이 문제가 투 포인터로 해결 가능한 문제임을 알았다고 해도 많이 짜보지 않았다면 구현에 실패했을 가능성이 높아 보입니다.
6번
알고리즘 분류 : BFS, 시뮬레이션, 브루트 포스, DP
난이도 : G3
삼성 A형같은 느낌의 문제였습니다. 푸는 법은 가양각색이겠지만 저는 미리 카드를 지워갈 순서를 정해두고 해당 순서대로 카드를 지울 때 필요한 조작 횟수를 계산했습니다. A형 유형을 많이 풀어보신 분은 알겠지만 이런 유형의 문제에서 전수조사를 하는 대신 자신이 보기에 좋아보이는 방법으로(ex : 가장 가까운 카드부터 방문하기) 구현을 하면 아마 틀릴 것입니다.
7번
알고리즘 분류 : 트리 DP
난이도 : G2
제가 알기로는 카카오에서 트리 DP를 낸 적이 없던 것 같은데 처음으로 나왔네요. 학부 알고리즘에서 트리 DP를 다루지는 않을거라 기존에 알고리즘을 공부한 사람이 아니었다면 이 문제를 풀어낼 수 있는 가능성이 거의 없었습니다. 다만 전형적인 트리 DP 문제이고 구현이 복잡하지는 않아서 푸는 입장에서는 편했습니다.
선수 지식이 어느정도였냐에 따라 생각은 다 다르겠지만 제 생각에 문제의 난이도 순은 1 < 2 < 3 < 6 < 4 < 7 < 5 이고 알고리즘 지식이 부족했다면 1, 2, 3(정확성만), 6 까지가 최선일 것 같습니다.
카카오 신입개발자 블라인드 채용이 독보적으로 어려운 편이니 오늘 코딩테스트를 잘 못치셨다고 해도 너무 실망하지 마시고 계속 정진합시다..!!
'일상 > ETC' 카테고리의 다른 글
컴퓨터 새로 사면 하는 작업 (12) | 2021.02.19 |
---|---|
도메인 갱신 (2) | 2021.01.08 |
2021 카카오 신입개발자 블라인드 채용 1차 총평 (35) | 2020.09.12 |
크리스마스 근황 (2) | 2019.12.14 |
3년간의 Competitive Programming 여정을 마무리하며 (4) | 2019.12.09 |
2019 ICPC Seoul Regional Preliminary (0) | 2019.10.16 |
WCTF 2019 online competition에 참여해보세요. (0) | 2019.07.05 |
-
벌써 리뷰라니 감사합니다..
구현력이 많이딸리는걸 느꼈네요..ㅜㅜ 7번빼고는 다 풀었어야하는 문제인데
강의들으면서 다시다듬어야겠어요-
제 강의에서도 투 포인터랑 트리DP는 없고 또 코딩테스트에 나올거라고는 생각을 못했는데 이번에 풀면서 코테가 굉장히 빡세게 나왔구나 하는 생각을 했어요.
그래도 올솔은 힘들겠지만 강의를 충실하게 따라간다면 합격 컷은 맞출 수 있을 것 같아요ㅋㅋ 고생 많으셨습니다!!
-
-
바킹독 그는 신인가?!
-
ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!ㅂㅋㄷ!
-
-
투포인터로 5번 어떻게 푸는지 좀 더 상세히 설명가능한가요?
-
시간을 정수로 변환하는 과정은 이미 했다고 치고, x to y까지 지속되는 시청자가 있다고 할 때 (x, 1)과 (y, -1)을 event에 저장합니다. 저장이 끝나 뒤에는 event를 정렬합니다.
크기가 adv_time인 window를 0부터 이동하며 window 왼쪽의 cnt와 오른쪽의 cnt를 저장합니다.
이후 매번 window가 event에 걸릴 때 까지 이동하면서 왼쪽의 cnt와 오른쪽의 cnt 값에 따라 total time을 적절하게 증감해주고 왼쪽의 cnt와 오른쪽의 cnt 값 또한 적절하게 갱신해줍니다.
-
-
역시 바KING독....알고리즘 공부하러 갑니다...
-
혹시 문제도 공유 안되는 건가요..?ㅠ ㅠ
-
문제 공유 하지말래요ㅠㅠ
-
-
-
상세한 후기 감사합니다 늘 응원하겠습니다!!
-
-
우와 리뷰 감사합니다ㅠㅠ 유투브 강의랑 블로그 글 보며 열심히 공부하고 있습니다
혹시 라인 코딩테스트도 리뷰하실 예정이신가요?-
라인은 제가 안쳐서 문제를 몰라요ㅠㅠ
-
-
-
코테 진행중에 후기만 글로 써놨고 따로 문제를 저장해두지는 않았어요ㅠㅠ
-
-
엄마 ! 나 커서 바킹독 될래요! 엄마 ! 나 커서 바킹독 될래요! 엄마 ! 나 커서 바킹독 될래요! 엄마 ! 나 커서 바킹독 될래요!
감사합니다!-
신입딱지 슬슬 떼셔야지욧
-
-
-
비밀댓글입니다
-
-
-
정규표현식 헷갈려서 안쓰고 그냥 푼 흑우 여기 1명 있습니다 음머
너무 좌절마시고 다시 힘내봅시당
-
-
-
파이썬의 장점은 메소드가 다양하다, 코드의 길이가 짧다, 문자열 처리가 간단하다 이고
C++의 장점은 실행 시간이 빠르다, 관련 자료가 다양하다
로 나눌 수 있어요. 그래서
1. C++을 주력으로 쓰는데 문자열 처리가 복잡한 문제만 Python을 이용한다
혹은
2. Python을 주력으로 쓰는데 실행 시간이 간당간당할 것 같은 문제만 C++을 이용한다.
이 두 가지 전략중에 하나를 쓰시면 될 것 같고 저는 워낙 C++으로 문제를 많이 풀었어서 1번 전략을 쓰고 있지만 2번 전략도 괜찮을 것 같아요.
-
-
당신이 2시간만에 다푸신 그분입니까?
-
저는 퇴물이라 1번 6번에서 절어서 3시간 정도 걸렸고 https://blog.naver.com/edenooo/222087623398 이 분이 찾으시는 그 분입니다
-
-
2차는 안보셨나보네요 ㅠㅠ 후기기대했는데 없는거보니, 대학원에서 고생중이신거같군요
-
이것저것 할게 많기도 하고 괜히 2차까지 치기 좀 부담스럽기도 하고 해서 안쳤네요ㅎㅎㅎ,,, 블로그에 있는 후기 잘 봤습니다!!
-
-
-
안녕하세요, 비회원의 비밀글은 비밀 댓글을 달 수가 없어서 제 개인 연락처나 admin@encrypted.gg 로 연락주시면 답변드리겠습니다!
-
-
-
학교 숙제를 하거나 개인적으로 개발을 하면서 자연스럽게 알게 되는 것들이 여럿 있는것 같아요
-
-
저기요? 신이세요?
블로그에서 도움 많이 얻습니다. 항상 감사합니다-
^^77
-
-
오늘 방송한 자료 여기에 올라오나용??
-
슬라이드 양이 너무 많아서 고민중,,,
-