Udemy - 문제 해결 접근법
정말 못 풀겠는 문제가 나왔을 때 우리는 어떻게 접근해야 하는가?
알고리즘이란?
5%E1%86%B8%200f73cc9e30234d4b88395850f07235ab/Untitled.png)
특정한 기능이나 업무를 하기 위해 수행해야 하는 과정이나 단계들의 집합!
- 문제를 해결하기 위한 계획을 세운다.
- 일반적인 문제풀이 패턴을 마스터 한다.
🍪 문제 해결 전략
- 문제를 완벽히 이해한다.
- 구체적 예시를 꼼꼼히 탐색한다.
- 문제를 쪼갠다
- 문제를 풀고 → 단순화 한다
- 복기 & 리팩토링
1️⃣ 문제를 완벽히 이해하기
- 해당 문제를 나만의 표현으로 바꿔서 설명할 수 있는가?
- 입력값은 무엇인가?
- 출력값은 무엇인가?
- 출력값을 얻는데 오로지 입력값만이 활용되는가? (정보의 충분성)
- 데이터에 어떤 이름을 붙여줘야 하는가?
예시
1
2
3
4
5
6
7
8
9// 두 인풋값을 받아 그 합을 출력하는 함수를 작성하시오
function add(a, b) {
// 1. 나만의 표현 : 입력값 두개의 합을 반환하는 함수를 제작한다.
// 2. 입력값은 ? : a와 b 둘 다 정수
// 3. 출력값은 ? : 하나의 정수 (a와 b의 합)
// 4. 정보의 충분성 : a와 b만 있으면 되므로 충분하다.
// 5. 데이터 네이밍 : sum이 필요할 것 같다.
}
2️⃣ 구체적 예시를 꼼꼼하게 탐색하기
문제를 이해하는데 큰 도움을 줄 수 있고 + 조금 더 뚜렷한 청사진을 그릴 수 있으며 + 더 다양한 추론을 이끌어낼 수 있다.
두 세가지 간단한 예시들을 그 입력값 & 출력값과 함께 같이 적어 내려간다.
조금 더 복잡한 예시로 넘어간다.
유효하지 않은 입력값을 고려한다. (null, undefined, 유효하지 않은 타입 등등)
⇒ 즉, 다양한 변수들을 고려해야 한다.
3️⃣ 문제 단계별로 세분화 하기
주석을 활용해 문제를 풀 때 단계별로 필요한 로직과 코드를 차례대로 작성한다.
- 문제가 이해 됐어도 무작정 코드를 작성하지 않는다.
- 차례대로 가장 먼저 해야 할 것과 가장 나중에 해야 할 것을 정리하며
문제 해결 과정을 차례대로 써 내려간다. - 설령 시간이 부족해 코드를 반밖에 짜지 못했어도, 접근 방식 자체가 면접관에게 플러스 요인이 될 수 있다.
Ex) “아 주석을 보니, 얘는 시간만 있으면 충분히 풀 수 있었겠구나”
4️⃣ 문제풀이 & 단순화
단순화란 ?
⇒ 풀 수 없는 것은 두고, 내가 풀 수 있는 것들만 먼저 해결하는 것 (부분점수 취하기 전략)
- 문제해결에 있어 가장 어려운 부분을 찾아낸다.
- 그 어려운 부분을 일단 무시한다.
- 간단한 솔루션들을 우선 도출한다. (풀 수 있는 단계들만 우선적으로 해결)
- 어려운 부분을 추후에 구현하여 통합한다.
5️⃣ 복기와 리팩토링
더 나은 개발자가 되기 위해선, 솔루션을 낸 후에도 코드를 복기 및 리팩토링 하는 습관을 들여야 한다.
즉, 더 효율적인 코드가 될 수 있도록 자신의 코드를 더 발전시켜야 한다는 것이다.
- 체크리스트
- 다른 방식의 결과도 도출이 가능한가?
- 한 눈에 이해하기 쉬운가?
- 다른 문제에도 이 알고리즘과 솔루션을 적용할 수 있는가?
- 성능과 효율성을 더 개선할 여지가 존재하는가?
- 다른 사람들은 어떻게 풀었을까?
Udemy - 문제 해결 접근법