Udemy - 문제 해결 접근법


정말 못 풀겠는 문제가 나왔을 때 우리는 어떻게 접근해야 하는가?

알고리즘이란?

알고리즘이란5%E1%86%B8%200f73cc9e30234d4b88395850f07235ab/Untitled.png)

특정한 기능이나 업무를 하기 위해 수행해야 하는 과정이나 단계들의 집합!

  1. 문제를 해결하기 위한 계획을 세운다.
  2. 일반적인 문제풀이 패턴을 마스터 한다.

🍪 문제 해결 전략

  1. 문제를 완벽히 이해한다.
  2. 구체적 예시를 꼼꼼히 탐색한다.
  3. 문제를 쪼갠다
  4. 문제를 풀고 → 단순화 한다
  5. 복기 & 리팩토링

1️⃣  문제를 완벽히 이해하기

  1. 해당 문제를 나만의 표현으로 바꿔서 설명할 수 있는가?
  2. 입력값은 무엇인가?
  3. 출력값은 무엇인가?
  4. 출력값을 얻는데 오로지 입력값만이 활용되는가? (정보의 충분성)
  5. 데이터에 어떤 이름을 붙여줘야 하는가?
  • 예시

    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️⃣  구체적 예시를 꼼꼼하게 탐색하기

문제를 이해하는데 큰 도움을 줄 수 있고 + 조금 더 뚜렷한 청사진을 그릴 수 있으며 + 더 다양한 추론을 이끌어낼 수 있다.

  1. 두 세가지 간단한 예시들을 그 입력값 & 출력값과 함께 같이 적어 내려간다.

  2. 조금 더 복잡한 예시로 넘어간다.

  3. 유효하지 않은 입력값을 고려한다. (null, undefined, 유효하지 않은 타입 등등)

    즉, 다양한 변수들을 고려해야 한다.


3️⃣  문제 단계별로 세분화 하기

주석을 활용해 문제를 풀 때 단계별로 필요한 로직과 코드를 차례대로 작성한다.

  1. 문제가 이해 됐어도 무작정 코드를 작성하지 않는다.
  2. 차례대로 가장 먼저 해야 할 것과 가장 나중에 해야 할 것을 정리하며
    문제 해결 과정을 차례대로 써 내려간다.
  3. 설령 시간이 부족해 코드를 반밖에 짜지 못했어도, 접근 방식 자체가 면접관에게 플러스 요인이 될 수 있다.
    Ex) “아 주석을 보니, 얘는 시간만 있으면 충분히 풀 수 있었겠구나”

4️⃣  문제풀이 & 단순화

단순화란 ?
⇒ 풀 수 없는 것은 두고, 내가 풀 수 있는 것들만 먼저 해결하는 것 (부분점수 취하기 전략)

  1. 문제해결에 있어 가장 어려운 부분을 찾아낸다.
  2. 그 어려운 부분을 일단 무시한다.
  3. 간단한 솔루션들을 우선 도출한다. (풀 수 있는 단계들만 우선적으로 해결)
  4. 어려운 부분을 추후에 구현하여 통합한다.

5️⃣  복기와 리팩토링

더 나은 개발자가 되기 위해선, 솔루션을 낸 후에도 코드를 복기 및 리팩토링 하는 습관을 들여야 한다.
즉, 더 효율적인 코드가 될 수 있도록 자신의 코드를 더 발전시켜야 한다는 것이다.

  1. 체크리스트
    • 다른 방식의 결과도 도출이 가능한가?
    • 한 눈에 이해하기 쉬운가?
    • 다른 문제에도 이 알고리즘과 솔루션을 적용할 수 있는가?
    • 성능과 효율성을 더 개선할 여지가 존재하는가?
    • 다른 사람들은 어떻게 풀었을까?

Author

Hoonjoo

Posted on

2022-01-10

Updated on

2022-02-07

Licensed under

Comments