본문 바로가기

SW LAB/Java

코딩테스트 중요 포인트

요 근래 다양한 코딩테스트 문제를 풀면서 중요하거나 인지해야할 부분을 나열해보려 합니다.

1. 가장 중요한 것은 '문제 인지' 입니다.

문제에서 요구하는 것이 무엇인지를 정확히 파악해야합니다.

문제에 작성된 한 줄 한 줄 지문에 맞춰 코딩을 하게 되면, 특이 케이스에 걸려 결국 실패할 확률이 높습니다.

2. 코드 작성 전 풀이 방안을 고민해야합니다.

풀이 방안 1안이 생각났다고, 바로 코드를 작성하는 것이 아니라 ..

적어도 더 나은 방법은 없을까 ? 생각하며 두, 세 가지 정도는 고민할 필요가 있습니다.

코드 작성 중, 다른 방안이 생각나서 급하게 수정하면.. 버그나 시간초과에 걸릴 확률이 높아질 것입니다.

3. 유형에 따른 처리 방식 학습

스택, 큐, 리스트 등 선형 자료구조를 활용해야 하는지 ..

해시를 이용해야 하는지 ..

재귀함수를 이용하여 완전탐색이나 너비우선탐색으로 대응해야하는지 ..

우선순위 큐를 사용하여 자동정렬을 적용시켜야 하는지.. (되도록이면 꺼낼 경우에만 사용하는것을 권장)

등등 평소 연습했던 유형과 매칭시켜 풀이가 보다 더 쉽게 가능하도록 해야합니다.

4. 메소드 활용 능력

T[], List<T> 데이터에 대한 정렬 방법이나 ..

String, StringBuilder 에서 제공하는 메소드나 ..

등등 인지하고 있어야 보다 빠르게 풀이가 가능합니다.

5. 반복문 처리 능력

거의 모든 문제에는 '반복문'을 사용할 수 밖에 없습니다.

반복문을 처리할 때, Index 를 머릿속으로 설계된 프로세스에 맞춰 꼼꼼하게 코드 곳곳에 넣어야 합니다.

반복문 처리 능력만 어느정도 갖춰도 시간 단축이 엄청 될 것입니다.

6. 수학적 처리

가끔 수학적으로 처리해야할 때가 있습니다.

모든 경우의 수를 구해야할 때, 카운트를 어떻게 연산해야하는지 ..

특정 경우 하나만 제외하고자 할 때, 어떻게 연산해야하는지 ..

난이도 보통 정도 수준의 문제들을 주로 다뤄서 아직은 수학적 처리를 많이 접하지는 않았지만..

난이도가 높아질수록 요구를 많이할 것으로 보입니다. (반복문 처리 능력으로 대체 가능하기도..)

7. 다양한 유형 경험

코딩 테스트는 정말 하면 할수록 새로운 문제를 접할 때, 이전과 다르게 생각의 사고방식과 시야가 넓어지는 것을 느낄 수 있습니다.

특히, 그리디알고리즘은 경험을 하면 할 수록 문제해결능력이 높아지는 것을 느낄 수 있습니다.

8. 테스트 케이스 작성

문제에서 주어진 테스트케이스만 통과했다고 완료처리하면 안됩니다.

내가 생각하기에 특이한 경우를 케이스에 넣어 테스트를 수행해서 결함을 찾아야합니다.

이를 위해선 코드 작성에 시간을 많이 단축시켜 놓아야겠죠 ..

이 정도로.. 중요하다고 생각되는 부분을 정리했습니다.

현재는 프로그래머스, 코딜리티로 주로 연습을 하고 있지만.. '백준 알고리즘' 사이트를 추천하는 분이 많더군요 ..

'백준 알고리즘'이 다양한 유형과 많은 문제가 있는 것으로 알고 있습니다.

그리고 .. 준비과정에서 ..

시간이 부족하지 않다면, 문제가 안풀리더라도 계속 고민해서 결국 풀어보는 경험을 하는 것도 좋습니다.

부족하다면, 30~40분 내 못풀 시 구글링으로 답안을 참고하며 이어서 작성하는 것도 방법입니다.

앞으로 더 많은 유형을 접해서 더 넓게 중요한 점을 포스팅하도록 하겠습니다.