2022 SK텔레콤 T-WorX for Developers 챌린지 후기
백엔드 분야로 지원했다.
10시부터 1시까지 3시간 동안 진행되었고 문제 난이도는 평이했다.
다만 내 오류인지 평소 잘 되던 테스트케이스가 복사가 불가능했다.
문제
1번 문제는 선택정렬?인가 어떤 정렬에 대한 개념을 이용하는 문제로 보였다. 하지만 n의 크기가 매우 작아 그냥 구현해주기만 하면 풀리는 문제였다. 백준으로 치면 딱 실버 5 수준의 기본문제 정도였을 것 같다. 뭔가 더 좋은 풀이가 있었을 것 같다.
2번 문제는 머리를 조금 써야하는 구현 문제였다. 하지만 의외로 if else는 몇번 사용하지 않고 구현할 수 있어서 구현 난이도 자체는 어렵지 않았다. 다만 문제가 워낙 길어서 이해가 어려웠던 문제였다. 실버3~5 정도의 무난무난한 문제였던 것 같다.
3번 문제는 구현 + 이분탐색 문제었을 것 같다. n,m제한이 30만으로 워낙 크고 질문의 개수도 5만개로 시간제한이 빡세보이는 문제였다. 일단 30만개의 부가서비스와 30만개의 데이터 요금제에 2차원 배열 혹은 딕셔너리를 이용해 구현한다면 메모리 초과가 발생할 것 같아서 피했다. 여기서 생각해낸 것이 어차피 뒤에 주어지는 데이터 요금제는 앞의 부가서비스를 모두 포함하고 있다는 것이다. 그러므로 각 부가서비스의 최초 등장 순서를 저장해주고 질문에 들어온 부가서비스들을 비교해 가장 큰 순서를 가진 경우 그 위치가 곧 정답의 후보가 된다고 생각했다. 정답이 아닌 정답이 후보인 이유는 조건 중 하나인 데이터의 용량 때문이었다. 데이터의 용량의 경우 이분탐색으로 빠르게 위치를 알아낼 수 있고 이 두 가지 정답 후보 중 큰 값이 곧 정답이라 생각하고 구현해주었다. 풀이가 맞다면 난이도는 실버 1 ~ 골드 4 정도이지 않을까 싶다. 평소에 알고리즘 문제를 많이 풀어보았다면 발상이 그렇게 어려운 문제는 아니었던 것 같다.
4번 문제는 그래프 탐색 + 백트래킹이었을 것 같다. 사실 이 문제는 풀 당시에는 이상한 풀이를 제출해버렸고, 끝나고 나서 조금 생각을 해보니 그 풀이가 틀렸다는 것을 알게되었다. DFS로 (현재위치, 야영횟수, 누적이동횟수) 이렇게 돌리면 쉽게 풀수 있을 것 같다. 다만 발상이 조금 힘든 문제였다고 생각한다.
느낀 점
내가 실력이 늘은 것도 있겠지만 문제 자체는 생각보다 되게 쉬웠다.
이번 코테를 칠까 말까 고민이 되게 많았다. 7월 18일자로 입대가 확정이 나버려서 노는 것에 집중하고 싶었고, 근 2주정도 알고리즘도 쉬었을 뿐더러 아침형 인간이 아니라 아침 코테는 매우 힘들어하기 때문이다. 그런 상황에서 코테가 있던것도 까먹어서 1시간동안 타임어택을 하게 되었고, 4번문제에서 실수를 하게 되었다. 끝나고 생각해보면 내가 제출했던 4번 문제의 코드는 답도 없는 코드였다. 우선순위큐를 이용해주었는데 push와 pop이 발생할 횟수나, 3차원 최대 크기가 6백만이 넘는 배열까지 지금 생각하면 왜 이렇게 짰는지 모를 코드였다. 머리쓰기 싫다고 맨날 대충대충 짜고 제출해보고 틀리면 고치고 그랬는데 스스로 테스트케이스를 만들거나 예외상황을 생각해보는 능력이 아직 부족함을 느꼈다. 4문제 모두 테스트케이스는 통과하였지만 히든 테스트케이스에 털릴 수도 있을 것 같다.