저번 LeetCode 콘테스트 첫 번째 만점 이후로도 가능하면 Leetcode Contest에 참여하려고 노력중인데, 첫 번째 만점 이후로 다시 4문제를 모두 맞추어서 느낀 점을 정리해보려고 한다.
Wrong Answer Issue
사실 다른 시험들 보다 내가 잘 정리해둔 유형이 등장한 덕이 큰 것 같다. 사실 순위보다 전부 맞추는 것에 급급한 실력이라서, 가장 쉬운 1번에서 마구잡이로 제출을 해 버린 것이 아쉽다. 1번에서만 총 8번을 틀렸는데, 틀린 횟수만큼 Finsish Time에 추가 시간이 붙어서 등수에서 밀리는 것 같다.
4번 문제 회고
이번 시험에서 4문제 모두를 맞출 수 있었던 이유는
1.
4번 문제가 쉬웠다. (평소 hard, 이번엔 medium)
2.
문제 유형이 이분탐색이다
이분탐색의 경우는 문제를 풀 때 고려해야할 요소가 많아서 매번 머리가 아팠다. 그래서 얼마 전에 대략 1주일에 거쳐서 반복적으로 문제를 풀고 하나의 큰 템플릿으로 묶어서 문제 해결 전략을 마련해 뒀다. 이 덕에 큰 고민 없이 문제를 해결할 수 있었다.
만약 이분탐색 문제를 풀 때
•
문제를 보고 이분탐색 문제라는 사실을 파악하는 데 오래 걸린다
•
탐색의 조건이나 범위가 헷갈린다
•
l≤r인지, l<r인지, 혹은 l, r을 어떻게 업데이트 해야하는 지 애매하다
이런 경우(내가 눈물을 흘리면서 쓴) 해당 글이 도움이 될 것이라 생각한다.
[Python] 이분탐색 쉽게 푸는 템플릿 (← 클릭)
회고
지금 상태가 취업을 위한 알고리즘 공부와 Competitive Programming(알고리즘 대회) 사이에 있는 것 같다. 어려운 문제를 시간적인 압박 안에서 마주하는 상황이 문제 해결 능력을 기르는 데 큰 도움이 되는 것 같아서 계속 참여하려고 노력하는 듯하다. 크게 세 가지 부분에 시간을 쓰는데,
1.
전략 수립: 문제를 읽는다 → 어떤 알고리즘과 자료구조를 사용하면 풀리는 지 고민
2.
전략 정검: 해당 전략을 사용했을 때 문제의 제한조건에 잘 부합하여 통과할 수 있는 풀이인가 정검
3.
구현: 문제 조건에 맞게 구현 (실제 코딩)
4.
디버깅
알고리즘이 약할 때는 1번에서 대부분의 시간을 투자하고, 1시간 30분이라는 제한 시간 때문에 1, 2번이 완료되지 않았음에도 어쩔 수 없이 3번으로 넘어가는 경우가 많았다. 하지만 최근에는 1, 2, 3, 4번에 내가 시간을 어느 정도 투자하고 있는지, 내가 어떤 상태에 있는 지 인지된 상태에서 문제를 풀고 있는 것 같다.
나도 아직 많이 부족하기 때문에, 안정적으로 4문제를 맞출 수 있을 때가 된다면 내가 빠르게 알고리즘 PS (Problem Solving) 실력이 늘게 된 과정과 시행착오에 대해 정리해볼까 한다.
앞으로의 계획
심화된 자료구조나 알고리즘을 공부하기 보다, 앞서 언급한 1, 2, 3, 4번 각각에서 시간을 단축하기 위해 노력해야겠다.
1.
전략 수립 → 알고리즘 유형 별로 약한 유형을 반복적인 문제 풀이로 보완
2.
전략 정검 → 문제를 풀 때 시간 복잡도, 공간 복잡도, Corner Case에 대한 고려 빼먹지 않기
3.
구현 → 알고리즘에 대한 템플릿을 만들어 두고, 자료구조도 라이브러리 없이 구현할 수 있게 연습
4.
디버깅 → 노가다 마다하지 않기 ,,,