5월 18일
모든 작업들은 기본적으로 너무 간단하거나 순조롭게 바로 해결할 수 있다면 생략할 수도 있다.
예시 : 두 숫자를 가지고 합계를 반환하는 함수를 작성하라.
유저 스토리, 유닛테스트 등
예시 : 문자열을 전달받아 각 문자가 몇개 있는지 출력하는 함수를 작성하라.
밟아야 할 단계들을 명확하게 작성하기. 해결책의 기본적인 구성 요소 (pseudocode, 주석 etc.)
예시 : 문자열을 전달받아 각 문자가 몇개 있는지 출력하는 함수를 작성하라.
숫자나 소문자만을 받는다고 한다면,
문제를 모두 해결할 수 있다면 해결하고 해결하지 못한다면 단순한 부분 먼저 해결하기
짧은 시간 내로 해결하기 어려운 부분을 찾게 되면 잠깐 뒤로 미루고 단순한 부분을 먼저 해결한 다음 다시 어려운 부분으로 넘어가 통합하기
예시: 문자열을 전달받아 각 문자가 몇개 있는지 출력하는 함수를 작성하라. 에서
문자열이나 숫자가 아닌 경우를 찾는 메서드(정규표현식)이 기억나지 않는다면 // 혹은 모른다면,
기본 로직부터 시작해 대소문자를 그대로 둔 뒤에 나중에 (마지막에) 처리하기
function charCount(input) {
let result = {};
input.toLowerCase();
input.forEach( (e) => {
//if(문자나 숫자라면)
if(result[e] > 0) result[e]++;
else result[e] = 1;
});
return result;
}
해결에서 끝내지 않고 리팩토링을 위해 무엇이 필요할지 생각해보기
function charCount(input) {
let result = {};
input.toLowerCase();
input.forEach( (e) => {
if(result[e] > 0) result[e]++;
else if (e.match("/[a-z0-9]/" !== null) //문제 해결, 로직 위치를 옮겨 시간 복잡도 향상
result[e] = 1;
}
});
return result;
}
여기서 성능을 더 향상시키겠다면 정규표현식 대신 charCodeAt을 이용해 유니코드로 직접 비교 등
코드를 더 간결하게 만들겠다면 if else 대신 삼항연산자 사용 등
많은 리팩토링 방법이 존재
5월 19~20일
예시 : 교유값이 몇개 있는지 찾는 알고리즘 ([1, 1, 2, 3, 3, 4, 5, 6, 6, 7] = 7)
function countUniqueValues(str1, str2) {
if(arr.length === 0) return 0;
let i = 0;
for(let j = 1; j < arr.length; j++) {
if(arr[i] !== arr[j]) {
i++;
arr[i] = arr[j]
}
}
}
return i + 1;
}
i i ([6])
[1, 1, 2, 3, 3, 4, 5, 6, 6, 7] -> [1, 2, 3, 4, 5, 6, 7, 6, 6, 7]
j j
예시 : 배열 내에 n개의 이어진 요소를 더한 값의 최댓값 찾기 ([2, 6, 9, 4, 1, 8, 5, 6, 3], 3) = 19
function maxSubarraySum(arr, num) {
let max = 0;
let temp = 0;
if (arr.length < num) return null;
for (let i = 0; i < num; i++) {
max =+ arr[i];
}
temp = max;
for (let i = num; i < arr.length; i++) {
temp = temp - arr[i - num] + arr[i];
max = Math.max(max, temp);
}
return max;
}
[2, 6, 9], 4 => 2, [6, 9, 4], 1 => ...
17 17 - 2(뒤의 값) + 4(앞의 값) = 19 (max < 19; max = 19)