1. 문제를 풀기전에 고민하는 시간, 구현하는 시간, 테스트 하는 시간을 1:1:1 비율로 한다.
(되도록이면 고민하는 시간을 길게)
2. 고민하는 부분은 많지만 간략하게 다음과 같다.
① 어떠한 자료구조를 쓸지
(배열, 연결리스트, 어레이리스트) / (스택, 큐, 힙, 세그먼트 트리)
② 어떤 구조로 짤지
메소드의 위치, 틀 그리고 재귀로 구현할지 반복문으로 구현할지
속도 : 재귀 < 반복문
재귀는 자신이 할 일만하고 슥 넘기는 것이기 때문에 구현의 스케일이 큰 경우에
논리를 헷갈리지 않고 구현할 수 있다.
③ 어떠한 기술로 구현해야 할지
브루트포스, DFS, BFS, 백트래킹, 시뮬레이션, DP, 그리디
④ 이렇게 구현하였을때 시간 복잡도가 어떻게 나오는지
10,000 * 10,000 = 100,000,000(1억)
약 1억번의 연산이 1초가 걸린다.
문제에 주어지는 시간은 대개 2초로 약 2억번의 연산이 허용된다.
3. 테스트 케이스에 너무 의존하지 마라
테스트 케이스는 모든 경우를 보여주지 않는 경우가 많다.
테스트 케이스만을 타겟으로 하지 말고 이외의 경우를 항상 고려하자.
4. 실제 시험에서는 Pass/Fail/컴파일 에러/시간초과 등의 결과를 알 수 없는 경우가 많다.
이를 고려하여 고민하는 시간에서 논리에 헛점이 없는지
계속해서 고려하고 실제로 문제를 풀 때에는 한번에 Pass가 나오는 연습을 하도록 한다.
5. 빠르게 많은 문제를 푸는 것도 중요하지만 새로운 문제를 마주쳤을때
고민하는 연습을 통해 풀어보지 못한 문제가 나와도 대응할 수 있도록 해야한다.
'일기' 카테고리의 다른 글
머신러닝의 교과서 배송 완료! (0) | 2021.01.13 |
---|