문제 해결코드를 작성하거나, 종이에 적기전에 문제를 스스로 확실히 이해해라.
1. 나만의 언어로 문제를 재정의 할 수 있는가?
2. problem에 어떤 inputs들이 들어가는가?
3. 문제 해결시 나와야하는 output은 무엇긴가?
4. output 들이 input로 결정될 수 있는가? 혹은, 문제를 풀기위한 충분한 정보가 있는가?
5. 문제의 일부인 중요한 데이터에는 어떻게 레이블을 붙여야 하는가?
등을 점검하라
문제를 더 잘 이해할 수 있는 예시를 떠올리자
또한, 최종 답이 온전히 작동하는지에 대한 체크도 해야한다.
User Stories
Unit Tests
수행해야 할 단계를 명시적으로 작성한다.
이렇게 하면 코드를 작성하기 전에 코드를 생각해 볼 수 있고, 입력하기 전에 남아 있는 개념적인 문제나 오해를 발견힐 수 있으며 세부 사항(예: 언어 구문)도 걱정하고 확인가능하다.
function charCount(str) {
// 리턴할 object 만들기
// stirng loop 돌기, 각 문자에 대해
//if char is (is a number/leter AND) a key in object, add one to count
// 이미 (숫자나 영어고) 키로 존재하면 count만 더하기
// if char is (is a number/leter AND) not in object, add it and set value to object
// (숫자나 영어고) 키로 존재하지 않으면 key추가후 카운트 더하기
// if char is something else (space, period, etc ) , dont do anything
// 만약 그외의 것이면 아무것도 하지말기
// object return 하기
}
막히면 일단 시작하고 간단하게 하기!
function charCount(str) {
// 리턴할 object 만들기
var result = {};
// stirng loop 돌기, 각 문자에 대해
for (var i = 0; i < str.length; i++) {
var char = str[i].toLowerCase();
if (result[char] > 0) {
result[char]++;
} else {
result[char] = 1;
}
}
return result;
}
문제를 풀어도 끝난게 아니다.
완벽히 이쁜 알고리즘 아니여도, improve 하는 것이 중요하다. 다시 보고 리팩토링 하는것이 좋다.
Tips)
쉬운, 익숙한 문법으로 작성하고 나중에 간단하게 줄이기
function charCount_refactor(str) {
// 리턴할 object 만들기
var result = {};
// stirng loop 돌기, 각 문자에 대해
for(var char of str) {
// if(/[a-z0-9]/.test(char)){
if(isAlphaNumveric(char)){
char = char.toLowerCase();
result[char] = ++result[char] || 1
}
}
return result;
}
// 숫자 알파벳 점검코드 만들기!
function isAlphaNumeric(str) {
var code = str.charCodeAt(0);
if (!(code > 47 && code < 58) && // numeric (0-9)
!(code > 64 && code < 91) && // upper alpha (A-Z)
!(code > 96 && code < 123)) { // lower alpha (a-z)
return false;
}
return true;
};