개요
1. 문제를 제대로 이해하기
문제를 여러분 방식대로 다시 생각할 수 있나요?
- 여러분만의 방식으로 문제를 다시 생각해보아야 해요 그래야 질문이 무엇인지 실제로 이해할 수 있어요.
- 입력값이 무엇인가요, 출력값이 무엇인가요, 문제에 대한 해결책에서 나와야 할 결과는 무엇인가요를 생각해봐요.
예시
문제. 두 숫자의 합을 반환하는 함수를 구하세요.
- 문제를 자신만의 방식으로 다시 정의 할 수 있나요?
두 숫자의 합을 더해 반환한다.
- 문제에 해당하는 입력값은 무엇인가요?
정수인가? 소수인가? 문자인가?를 확인한다.
- 문제의 출력값은 무엇인가요?
정수인가? 소수인가? 문자인가?를 확인한다.
- 문제를 풀기에 충분한 정보를 가지고 있나요?
덧셈을 할 요소들
- 문제를 풀기위한 데이터에 어떤 레이블(label)을 정해줘야 하나요?
add(), sum, num1, num2 ...
2. 구체적 예제들
- 입력값과 출력값의 순서대로 예시를 두세 개 작성해 보세요.
- 점차적으로 복잡한 예시들을 사용해 보세요.
- 빈 입력값일때 결과를 생각해 보세요.
- 유효하지 않은 입력값을 넣었을때를 생각해 보세요.
예시
문자열(String)을 넣으면 각 character의 개수를 구하는 함수를 만들어 보세요.
코드를 입력하세요
- 입력값과 출력값의 순서대로 예시를 두세 개 작성해 보세요.
charCount("aaaa");
charCount("hello");
- 점차적으로 복잡한 예시들을 사용해 보세요.
charCount("My phone number is. 324-1234-4623")
- 빈 입력값일때 결과를 생각해 보세요.
charCount()
charCount("")
- 유효하지 않은 입력값을 넣었을때를 생각해 보세요.
charCount(null)
charCount(undefined)
3. 세분화
예시
문제. 문자열(String)을 넣으면 각 character의 개수를 구하는 함수를 만들어 보세요.(단, 대문자는 소문자로 취급하며 숫자와 알파벳의 개수만을 구합니다.)
function charCount(str){
}
이렇게 세분화 하여 목록을 만들어 놓는것은 다음과 같은 장점이 있습니다.
- 접근 방법을 공식화 하여 해야할 방향을 알고 있다.
- 시간이 부족해서 중간까지만 구현했다 하더라도 작업에 대한 틀을 잡을 수 있다.
4. 리펙토링(Refactoring)
리펙토링 할때 질문들
- 결과를 확일할 수 있나요?
- 다른방법을 생각할 수 있나요?
- 한눈에 보고 이해할 수 있나요?(코드가 얼마나 직관적인가요?)
- 결과나 방법을 다른 문제에도 적용시켜볼 수 있나요?
- 해결책의 성능을 향상시킬 수 있나요?
- 다른 사람들은 이 문제를 어떻게 해결하나요?
리펙토링의 순서
- 다른방법을 생각해보기
- 가독성 향상시키기
- 해결책 성능 향상시켜보기
- 다른 사람들의 문제풀이를 분석하기