1. 코딩 테스트 준비하기
코딩 테스트를 준비하기에 앞서 자신이 자신있게 사용할 수 있는 언어를 선택한다,
코딩 테스는 코딩 능력도 중요한 부분이지만, 문제를 어떻게 해결하는지에 대한 문제 풀이 능력을 확인하는 것이라고 생각한다.
1. 문제를 쪼개서 분석하기
먼저 문제 분석 단계에서 문제 전체를 한번에 분석하지 않고 문제를 동작 단위로 쪼개서 분석하는 것이 유리하다고 책에서 배웠다.
그래서 앞으로 코딩 테스트 문제를 풀기 전에 분석 단계에서 동작 단위로 쪼개서 분석하는 연습을 하면서 준비해야될 것 같다.
2. 제약 사항을 파악하고 테스트 케이스 추가하기
문제에는 보통 제약사항이 있으므로 해당 제약사항들을 정리해두고 이를 고려해서 테스트 케이스를 추가하는 연습을 하는 게 좋을 것 같다. 이 과정은 어떤 알고리즘을 사용할지 고민할 때 유용하고, 추후 코드를 구현하는 단게에서 예외를 거를 때 도움이 된다.
3. 입력값 분석하기
보통 알고리즘의 시간 복잡도는 입력값이 결정하는 경우가 많다. 입력값의 크기를 확인하면 문제를 제한시간 내에 풀 수 있는 알고리즘과 그렇지 않은 알고리즘을 미리 걸러낼 수 있다는 장점이 있다.
4. 그리디하게 접근할 때는 근거를 명확히 하기
※ 그리디 : '현재 상황에서 가장 유리해 보이는 선택을 하는 것'
책에서 문제를 풀 때 '그리디하게 풀리지 않는 문제를 그리디하게 접근하는 것'이 가장 많이 하는 실수라고 한다.
5. 데이터 흐름이나 구성을 파악하기
데이터 흐름이나 구성을 파악하는 것도 중요하다.
의사 코드로 설계하는 연습하기
문제 분석을 끝낸 다음에 분석 내용을 바탕으로 전체적인 코드를 설계해야 한다. 구현은 그 다음 단계이다.
코딩 테스트에서 설계의 의미 : 의사 코드를 작성하라.
※ 의사 코드 : 프로그램의 논리를 설명하고 알고리즘을 표현하기 위해 작성한 일종의 지침
다음과 같은 원칙에 따라 의사 코드를 작성한다.
- 원칙 1 : 프로그래밍 언어로 작성하면 안 된다.
- 원칙 2 : 일반인도 이해할 수 있는 자연어로 작성해야 한다.
- 원칙 3 : 일정한 형식이 없다.(자유롭게 작성이 가능하다.)
이에 따른 장점 : 실제 구현 단계가 아닌 추상 단계를 설계를 진행할 수 있어, 설계 아이디어에 좀 더 집중할 수 있다.
구현 단계 이후 코드를 수정하면 시간이 많이 들지만 추상 단계에서 의사 코드를 수정하는 건 비교적 수정 시간이 더 짧아 시간에서도 큰 이득을 볼 수 있다.
의사 코드를 작성하는 방법
1. 세부 구현이 아닌 동작 중심으로 작성하기
의사 코드를 작성할 때 세부 구현을 고민하는 순간 의사 코드는 설계가 아닌 구현이 주 목표가 되기 떄문에, 동작 중심으로 작성하는 것이 중요하다.
ex) 국어, 영어, 수학 점수를 입력받는다.(동작 중심) -> 크기가 256 바이트인 문자열 배열을 3개 선언해서 표준 입력으로 국어, 영어 수학 점수를 입력받는다.(세부 구현 고민)
예시처럼, 실제 프로그래밍 요소는 의사 코드에서 추가하면 안된다. 꼭 명심하고 의사 코드를 작성할 때 주의하자.
2. 문제 해결 순서로 작성하기
의사 코드가 완성되면 이를 토대로 코드를 구현할 것이므로 의사 코드는 문제 해결 순서대로 작성해야 한다.
의사 코드 자체는 실제 구현할 때 주석이 되기도 하기 때문에 순서대로 작성하면 나중에 코드를 분석하기에도 상당히 용이하다.
ex) 1. 영어 성적 입력
2. 영어 성적이 60점을 넘는지 확인(분기)
2-1 60점 이상이면 통과
2-2 60점 미만이면 실패
3. 충분히 테스트하기
구현전 마지막 단계는 충분히 테스트하라는 것이다. 왜냐하면 구현 단계로 갈수록 잘못된 부분을 수정하는 데 비용은 점점 커지기 때문에 의사 코드가 미리 생각해본 테스트 케이스를 통과할 수 있을지 고민해봐야 한다. 충분한 고민 후에 의사 코드가 대부분의 테스트 케이스를 통과할 수 있을 것 같을 때 구현을 시작하면 된다.
앞으로 이 내용들을 바탕으로 책을 통해 코딩 테스트 준비를 해봐야할 것 같다.