코딩테스트에서 어려운 문제를 접했을 때, 그저 분할 정복이 아닌 어떻게 문제를 접근해야 할지에 관한 글입니다.
코딩테스트 실력을 기르기 위해 평소 연습할 때는 어떻게 문제를 접근해야 하는지에 대해 5단계로 나눠진 접근법을 소개합니다.
출처
글을 작성하기에 앞서 참고가 된 강의의 링크를 남깁니다.
[Udemy] JavaScript 알고리즘 & 자료구조 마스터클래스 : https://www.udemy.com/course/best-javascript-data-structures/
1단계 문제의 이해
문제를 보고 코드를 먼저 치기 시작하는게 아니라 문제를 이해해야 합니다. 이해하기 위해 아래와 같은 질문을 스스로에게 던져볼 수 있습니다.
- 질문을 잘 정리해서 이해하고 있는가?
- 문제의 입력값과 출력값의 형태와 값이 있는가?
- 입력값이 출력값을 어떻게 결정하는가?
- 문제에서 정말 중요한게 무엇인가?
- 코드를 어떤 과정과 순서로 작성할 것인가?
2단계 구체적 예제들
문제를 이해했다면, 해당 문제에 맞는 구체적인 예제케이스를 고려해 봅니다. 간단하고 쉬운 예제부터 어렵고 복잡한 예제까지 고려해서, 입력값과 결괏값에 대한 검증 및 문제를 어떻게 해결할 것인지 살펴볼 수 있게 됩니다.
3단계 : 세부 분석
3단계 에서는 문제를 본격적으로 세분화합니다. 코드를 입력하기 전 어떤 단계를 거쳐서 문제를 해결할 것인지 구분하고 주석기능을 활용하여 적어놓을 수 있습니다. 코드를 작성하기 전 다시 한번 생각할 수 있고, 에러 또는 이해되지 않는 부분을 파악할 수 있습니다.
4단계 : 해결 또는 단순화
해결
코드를 작성하는 과정입니다. 3단계에서 세분화 시킨 단계에 맞게 코드를 작성합니다.
단순화
위 와 같은 단계를 거친다고 해서 모든 문제가 풀리고 쉬워지지는 않습니다. 만약 세부분석 단계에서 문제를 세분화하여 해결하는 단계까지 생각하지 못했다면? 우선 쉽게 해결할 수 있는 단계까지 해결하는 방식입니다.
어려운 부분을 염두해 두고 해결할 수 있는 문제부터 작성하여, 알고리즘이 어떻게 동작할 것인지에 대한 이해 후 어려운 부분에 대해 파악이 된다면 해결하면 됩니다. (물론, 단순화를 거친다고 해서 어려운 부분을 해결할 수 있는 것은 아닙니다. )
5단계 : 되돌아 보기와 리팩터
4단계를 거치면 이미 문제를 해결할 수 있는 만큼 해결한 상태입니다. 문제를 해결한 데에서 멈추지 말고 아래 질문들을 통해 코드의 효율성과 가독성을 향상하는 과정을 거쳐야만 합니다.
- 한 줄씩 코드를 읽으며, 이상적인 부분, 효율적인 더 다른 방법이 있을지 고민하기
- 결과를 다른 방법으로 낼 수 있는지, 성능 개선의 여지가 있는지 고민하기
- 다른 문제에도 적용할 수 있는지 고민하고 이전에 만났던 문제와 유사한 점이 있는지 고민하기
- 다른 사람의 해결책과 나와는 무슨 차이가 있는지 찾아보기
위와 같은 과정을 통해 코드의 적당한 효율성과 가독성을 향상할 수 있습니다. 다른 문제를 해결할 수 있는 직관력 향상과 알고리즘 실력을 늘려 향후 문제해결을 위한 계획을 수립하고 일반적인 문제 해결 패턴을 학습할 수 있습니다.
'코딩테스트' 카테고리의 다른 글
[JS] 명예의 전당 (1) (0) | 2024.04.29 |
---|---|
[JS] 문자열 나누기 (0) | 2024.04.29 |
[SQL] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2023.09.04 |
[JS] 추억 점수 (0) | 2023.07.01 |
[JS] 달리기 경주 (0) | 2023.06.30 |