📌 알고리즘이란 무엇인가?
특정 작업을 달성하기 위한 과정이나 일련의 단계를 의미한다.
알고리즘을 잘 풀기 위해선
- 문제 해결 접근
문제 해결을 위한 계획 수립
- 문제 해결 패턴
일반적인 문제 해결 패턴 파악
⭐️ 문제 해결 접근법
1단계 : 문제 이해하기
- 나만의 언어로 문제를 설명할 수 있는가?
- 문제가 어떤 입력값을 담고 있는가?
- 출력값은 어떤 형태여야 하는가?
- 문제를 해결할 단서가 충분히 주어졌는가?
- 문제에서 정말 중요한 부분이 무엇인가?
2단계 : 구체적인 예제들기
구체적인 예시를 통해 코드가 제대로 작동하는지 확인할 수 있고, 추가적인 정보도 얻을 수 있다.
- 간단한 예시로 시작하기
- 더 복잡한 예시로 나아가기
- 빈 입력값이 있는 예제 살펴보기
- 유효하지 않은 입력값이 있는 예제 살펴보기
3단계 : 세부 분석 (Break Down) ⭐️
- 문제 해결을 위한 단계들을 명확하게 작성해보기(주석으로)
접근 방법을 공식화하여 문제 해결의 흐름을 이해하고, 어떤 단계에서 막히는지 파악하기 쉽다.
4단계 : 문제해결/단순화하기
단순화 방법 :
어려운 부분을 잠시 제쳐두고 단순한 해결책을 작성한 다음 다시 어려운 부분을 통합시키기
5단계 : 되돌아보기/Refactor ⭐️
Refactoring Questions
- 결과를 다른 방식으로 도출할 수 있는가?
- 코드를 한눈에 이해할 수 있는가?
- 이 해결책을 다른 문제에도 적용할 수 있는가?
- 성능을 향상시킬 수 있는가?(시간 복잡도, 공간 복잡도)
- 다른 사람들은 어떻게 해결하는가?
ex. 문자열에서 영어 소문자와 숫자만 골라내야 할 때, 정규 표현식을 이용해 아래처럼 나타낼 수 있다.
/[a-z0-9]/.test(str)
여기서 그치는게 아니라, 아래처럼 덧붙여 이야기할 수 있다.
"자바스크립트에서는 정규 표현식이 수행 중인 작업과 사용 중인 브라우저에 따라 성능이 달라질 수 있다는 말을 들은 적 있다. 특히 크롬은 최근 정규 표현식 사용에 문제가 있었기 때문에, 더 나은 방법을 생각해보면 charCodeAt을 이용할 수 있을 것 같다. charCodeAt은 문자를 숫자코드로 바꾸어 주기 때문에 정규 표현식을 수학적 비교로 대체할 수 있다. 실제로 정규 표현식을 사용하면 charCode를 이용하는 것보다 55% 더 느린 케이스를 보있다."