본 포스팅은 깃헙 블로그 사용 당시 작성한 포스팅입니다.
문제 해결 접근
알고리즘(algorithm)이란?
특정 작업을 달성하기 위한 과정이나 일련의 단계
알고리즘 문제를 해결하기 위한 과정
- 문제 해결을 위한 계획 수립
- 문제 해결 패턴을 파악
- 문제를 단순화
문제의 이해
예시
- 스스로의 단어로 문제를 다시 말할 수 있는가?
- 상대방의 의도를 파악해 도리어 상대방에게 질문을 할만큼 그 의도를 이해할 수 있는가?
- 문제의 입력값을 정확하게 알고 있는가?
- 문제의 해결방법에서 나와야하는 출력을 알고 있는가?
- 현재 문제를 해결할 수 있는 정보가 충분한 지 파악 가능한가?
- 현재 문제에서 가장 중요한 게 무엇인 지 파악 가능한가?
구체적 예제들기
예시, 두개의 숫자를 입력받아 합을 반환하는 함수 작성
- 간단한 예부터 시작 (1+2, 5+9…)
- 더 복잡한 예제로 발전 (2,402,059,123,590,000 + 298,029,490…)
- 빈 입력이 있는 예제를 탐색 (“” + “”…)
- 잘못된 입력이 있는 예제 탐색 (“23” + 가나다)
세부 분석
코드를 작성할 때 단계별로 세분화해서 분석하는 것이 중요하다.
문제를 이해하고 의사코드로 작성해보며, 해결책의 기본 구성을 작성한다
예시
위와 같은 방법으로 코드를 작성하기 전 내가 취해야할 단계를 명시적으로 작성하고(의사코드), 개념적 문제나 오해가 남아있는 지를 파악하며, 세부 사항(ex. language syntax)에 대해서 고민하는 등 자세를 취할 수 있다.
해결 또는 단순화
의사코드를 기준으로 코드를 만들고 정리한다.
되돌아보기와 리펙터
작성한 코드를 살펴보고 효율성과 가독성을 점검한다. (면접 시 질문한다)
- 결과를 확인할 수 있는지
- 결과를 다르게 도출할 수 있는 지
- 코드 가독성이 좋은 지
- 사용한 방법을 다른 문제에 재사용 가능한 지
- 성능을 더 최적화할 방법이 있는 지
- 리팩토링할 다른 방법을 생각할 수 있는 지
- 다른 사람들의 풀이를 확인해볼 것