"알고리즘은 맞는데 왜 시간 초과지?" 하반기 코테 시즌마다 스터디 톡방에서 반복되는 질문이다.
"선수과목"이라는 단어가 문제에 등장하면 머릿속에서 알고리즘들이 서로 손을 든다. DFS?
DP 문제를 30분째 붙잡고 있는 사람 옆에 가서 "dp[i] 정의가 뭐야?"라고 물어보면, 대부분 우물쭈물한다.
코테에서 "연속 부분 배열" 또는 "연속된 K개 원소"라는 표현이 보이면, 반사적으로 for문 안에 for문을 작성하는 사람이 많다. 간단하니까.
코딩테스트 단골 유형 중에 "그룹 나누기"가 있다. 노드끼리 연결하고, 특정 두 노드가 같은 그룹인지 판별하는 문제.
백트래킹 문제를 풀 때 재귀 구조를 짜는 건 어렵지 않다. 진짜 어려운 건 "어디서 멈출 것인가"다.
코딩테스트에서 "연속된 부분 배열"이라는 문구가 나오는 순간, 머릿속에서 이중 for문이 떠오르면 이미 시간 초과 루트에 올라탄 거다. 대부분의 연속 구간 문제는 슬라이딩 윈도우 하나면 O(n)에 정리된다.
"최솟값의 최댓값을 구하시오." 이 문장을 읽고 바로 이분 탐색이 떠오르면, 이미 절반은 맞힌 거다.
지난 카카오 공채 코테를 본 친구가 시험 끝나고 이런 말을 했다. "코드 제출했는데 맞았는지 틀렸는지를 모르겠어.
트라이를 배워야 한다는 건 알지만 실전에서 써본 적은 없다는 사람이 의외로 많다. 프로그래머스 레벨 3 이상에서 문자열 문제를 만났을 때, 해시맵과 정렬만으로는 시간 초과를 피할 수 없는 순간이 반드시 온다.
"각 원소의 오른쪽에 있는 첫 번째 더 큰 수를 구하라." 이 문장을 보면 반사적으로 이중 for문을 짠다.
구글이 올해 초부터 코딩 면접에서 AI 어시스턴트 사용을 허용하기 시작했다. 메타는 작년 10월에 이미 도입했고.
연결 관계를 추적하는 문제가 나오면 대부분 DFS/BFS부터 떠올린다. 간선이 정적이고 한 번만 탐색하면 되는 상황이라면 그게 맞다.