알고리즘 접근법 [2/23]

가르송·2023년 2월 23일
0

매일공부

목록 보기
8/11

이번주부터 알고리즘 문제를 풀기 시작했다. 오랜만에 손을 대서 그런지 알고도 놓치는 것이 많았다. 문제를 해결하기 위해서 어떤 마음가짐으로 접근해야 하는지 복기하기 위해, 과거에 강의를 들으며 필기한 내용을 정리한다.

문제 해결 접근법

1단계 : 문제의 이해

문제를 이해하기 위해 던져야 하는 질문

  1. 문제를 나의 언어로 다시 정의하기
  2. 문제가 어떤 입력값을 가지고 있고, 어떤 출력값이 나와야 하는지 이해하기
  3. 출력값이 입력값으로 인해 결정되는지 생각해보기
  4. 이 문제에서 중점적으로 보아야 할 부분은 무엇인지 생각하기

2단계 : 구체적 예시 탐색하기

  1. 가장 간단한 예시부터 시작하기
  2. 더 복잡한 예시로 생각해보기
  3. 빈 입력값이 주어진 예시로 생각해보기
  4. 유효하지 않은 입력값이 주어진 예시로 생각해보기

예시

문자열을 입력값으로 받아 각 문자의 수를 반환하는 함수를 작성하시오.

  1. 가장 간단한 예시부터 시작하기
charCount("aaaa"); // {a:4}
charCount("hello"); // {h:1, e:1, l:2, o:1}
  • 전달한 문자만 포함해야 할지, 전달되지 않은 문자는 b:0과 같은 식으로 포함해야 할지 의문이 생긴다.
  1. 더 복잡한 예시로 생각해보기
charCount("my phone number is 182763");
  • 공백도 고려해야 하는가?
  • 달러 기호, 밑줄, 숫자는 어떻게 해야 하는가?
  • 대소문자를 구분해야 하는가?
  1. 빈 입력값이 주어진 예시로 생각해보기
charCount(); // null, false, undefined, error?
  1. 유효하지 않은 입력값이 주어진 예시로 생각해보기
charCount("");
charCount(23452345);
charCount(null);

3단계 : 세분화 분석

위의 단계에서 생각한 것을 가지고 함수를 작성한다.
작성할 때에는 주석을 활용해 세분화한다.

function charCount(str) {
  // 무언가를 한다.
  // 객체를 반환
  // 대소문자 구분 없이 계산하고, 소문자 알파벳으로 키를 만든다.
  // 숫자도 센다.
  
  // 반환할 객체 생성
  // str을 루프하며...
  // if 해당 요소가 number/letter && 객체에 키로 존재하면 1을 더하고
  // if 해당 요소가 number/letter && 키로 존재하지 않으면 키를 추가한 후 1을 더하도록 한다.
  // 객체 반환
}

4단계 : 해결 또는 단순화

5단계 : 되돌아보기와 리팩토링

  • 결과가 제대로 도출되는가?
  • 해결한 방법 외에 다른 방법이 있는가?
  • 한눈에 보고 이해할 수 있는가? (해결책이 얼마나 직관적인가)
  • 결과나 방법을 다른 문제에도 적용할 수 있는가?
  • 해결책의 성능을 향상시킬 수 있는가?
  • 다른 사람들은 이 문제를 어떻게 해결하는가?
profile
개발도 운동도 뜻대로 되지 않을 때에는? 산책을 합니다.

0개의 댓글