좋은 코딩테스트 공부 방법
구글에 대한 의존성이나 코딩 테스트 플랫폼을 최소화하는 방향으로 공부를 해야한다.
일단 문제를 읽고 입력이 들어왔을 때 거기서 일단 무엇을 출력해야할지 그것부터 이해를 해야 한다.
그런데 많은 사람들이 어떤 문제를 읽고 전략을 세우기도 전에 변수를 선언하고 For문부터 작성해버리는 습관을 가지는 사람들이 많다.
Live 코딩에서는 문제를 확인하지도 않고 냅다 변수나 For문을 적는 습관이 큰 마이너스가 될 수 있다.
먼저 문제를 보면 문제를 이해하고 내가 이해한게 이런거구나 생각을 해야한다. 어떤 자료구조나 알고리즘을 사용해야 겠다 생각을 해야된다. (우선순위)
문제를 풀 때, 지문만 보고 바로 지원하는 것이 아니라 입력의 길이가 최대 몇까지 들어오는지 입력은 무엇으로 들어오는지 이런 상수조건을 잘 조사해야 한다. (만약 라이브 코딩이라면 0이 들어갈 수 있는건지?, 입력의 길이는 얼만큼 들어올 수 있는지? 여쭤보면서 스코프를 줄여나가야 한다.)
입력의 길이와 시간복잡도
수백개 => O(2^n)
수만개 => O(N log N)
수백만 이상 => O(log N)
경험이 쌓이면 문제를 읽고 상수조건만 봐도 아 이건 어느정도 시간 복잡도 안쪽으로 풀어야겠다. 아 그러면 어떤 부분이 로그타임이상으로 걸리면 안되겠는데 그러면 트리형태의 알고리즘이 필요하겠다 감이옴
이런 뒤에 코드를 바로 작성하고 제출하는 것이 아니라 일반적인 샘플데이터 한두개랑 엣지케이스 샘플데이터를 한번 생각해보고 내 손으로 시뮬레이션을 돌려보고 검증해보는 것이 중요하다.
그리고 복잡도 분석을 해봐야한다. 내가 작성한 알고리즘의 시간 복잡도가 O(n)인지 Ologn인지 분석을하고 공간 복잡도도 메모리를 얼마나 먹는지 분석을 해야한다. 그 이유도 설명을 해야한다.
정답이 나왔을 때 다른 문제로 바로 도망가는 것이 아니다. 다른 사람이 어떻게 풀었는지 한번 확인해보고 내가 너무 장황하게 풀진 않았는지 공부를 해야한다.
요약
문제를 읽고 상수조건을 확인하고 접근 방법을 먼저 고민해라
30분~1시간 내로 못풀면 정답을 보고 공부해서 흡수해라
코드를 다 작성했으면 바로 제출하지 말고 복잡도 분석을 해라
풀고 나서 다른 사람들의 다양한 풀이와 깔끔한 코드를 꼭 공부해라
한달 안에 다시 와서 풀어. 15분 내로 풀 수 있을 때까지 공부해라.
'알고 리즘' 카테고리의 다른 글
[스트림] Stream..? (1) | 2024.11.25 |
---|