오늘 오후 1시에 프로그래머스에서 주최하는 SK ICT Family 개발자 채용
의 2차 코딩 테스트에 참가했습니다. 1차에서 확실친 않지만 2~3솔 정도 한 것으로 보이는데 2차 응시 기회를 얻게 되었습니다. 그런데 시험보기전부터 겁을 잔뜩 먹었습니다. 4시간에 4문제였기 때문입니다. 1차도 3시간에 4문제였는데 쉽지 않았는데 대체 얼마나 어렵게 낼까라는 생각을 하며 기다렸습니다.
겁먹었던 대로 저에겐 엄청 어려웠습니다. 1번 문제부터 시간 복잡도를 매우 신경써야될 것 같은 문자열 문제가 나왔는데 다행히 표본이 적어서 그냥 비효율적이더라도 일단 풀고보자하고 제출했습니다. 그런데 신기한 것은 정답 피드백이 있었습니다. 제출하면 제출 결과가 나와서 일단 맞았다고 나와서 빨리 넘어갈 수 있었습니다.
물론 히든 테스트 케이스가 있을 수도 있을 수도 있습니다. 2번까지는 그래도 문제가 이해되고 효율성을 차치하고 어떻게 풀어야 될지는 감이 왔습니다. 2번도 생각보다 어려워서 좀 헤매면서 2번에서도 1시간 내외를 쓴 것 같습니다.
그렇게 2시간이 남고 3번을 봤는데... 이건 뭐지?라는 생각이 들면서 무슨 알고리즘 문제인지, 뭘 써야할 지 모르겠다는 생각이 들었습니다. 지레 겁먹은건지 몰라도 바로 넘겼습니다. 나중에 시간이 된다면 후기를 찾아보며 무슨 문제인지 찾아보고는 싶습니다.
4번 또한 만만치 않았지만 3번보단 낫겠거니해서 시작했습니다. 근데 못풀거라는 공포에 이미 평정심을 잃었는지 집중이 잘 안됐습니다. 문제도 어려워서 생각도 정리가 안되고 그냥 의식의 흐름대로 50분이 남을 때까지 시간이 흘렀습니다. 마지막 50분에 좀 실마리를 잡아가나 했지만 결국 풀지 못했습니다.
최종 제출 기준 2솔인 것 같습니다. 아마 탈락할 가능성이 높아보이지만 좋은 기회였습니다.
코딩테스트를 보면서 알고리즘을 깊게 공부할 중요성은 낮다고 생각했는데 이런 문제들도 코딩테스트에 출제된다는 것을 알고 수준 높은 알고리즘 문제를 풀면 좋다는 걸 느끼게 되었습니다.
(혹시 3,4번을 풀이한 분이 계시다면 댓글로 힌트나 관련 알고리즘을 알려주시면 정말 감사하겠습니다..!!!)
3번 풀었는데요 노드의 갯수가 최대 12개이고 트리이기에 무조건 엣지는 node-1개 였습니다. 또한 마지막 입력예시에 가장 큰 힌트가 있었습니다 1,2 엣지와 2,1엣지가 같다는 점이었지요 노드 갯수가 적다보니 노드교환은 모두 진행하면서 full search했구요 엣지 삭제후 다시그리는건 사실상 필요 없었습니다. 무조건 두개의 트리의 엣지 갯수는 같을 수 밖에 없으니 1,2와 2,1등 노드 순서가 반전된 엣지를 같은 엣지로 취급하고 두개의 트리의 엣지를 비교하여 다른 엣지의 갯수가 최종적으로 수정해야할 간선의 갯수가 됩니다. 즉 b의 각 노드를 m(교환가능 횟수)깊이만큼 교환하며 새로운 트리를 만들고 a트리와 엣지를 비교하여 다른 엣지의 갯수를 구하고 최소 갯수를 출력했습니다. 노드 갯수가 워낙 적다보니 최악의 상황에서도 유효성 통과는 널널한 시간 나왔습니다.