devlog_owen
231019) TIL #3 reduce, map, fnGCD 개념정리 본문
오늘 알고리즘 문제 풀고 새삼 나의 무지함,무능함을 느꼈다. 입문용 문제였는데...
게다가 개인 프로젝트 과제도 완전 난항을 겪고 있어서 이 내용도 꼭 다음 TIL에 적고 말겠다.
1)reduce 함수
JS에서 제공하는 내장함수 중 하나. 배열에 대한 요소의 누산작업을 실시하고 그 결과를 반환함.
arr.reduce(callback(accumulator, currentValue, index, array), initialValue)
이것이 일반적인 구문이란다.
function solution(numbers) {
return numbers.reduce((a, b) => [...a, b * 2], []);
}
위는 오늘 내가 틀린 문제의 해답. 문제는 무작위 배열의 원소에 각각 *2하는 것.
accumulator는 각 단계에서 현재까지 누산 결과를 나타냄.
... accumulator는 accumulator 배열의 모든 요소를 복사한 거임.
currentValue는 현재 처리중인 배열 요소의 값임.
currentValue*2는 현재 값을 두 배한거임.
[ ]은 초기값임. 초기값이 없으므로 배열의 첫 번째 요소가 초기값이 된다. 예를 들어 배열이 [1,2,3]이다. 그럼 [1],[1,2],//[1,2,3]으로 최종결과가 나옴.
2) map 함수
JS에서 제공하는 내장 함수 중 하나. 배열의 각 요소에 대해 주어진 함수 실행 후 새로운 배열 생성함.
const arr = [1, 2, 3, 4, 5];
const doubledArr = arr.map(item => item * 2);
console.log(doubledArr);
오늘 내가 틀린 문제. 일반예문은 이렇다.
arr.map(callback(currentValue[, index[, array]])[, thisArg])
map 함수는 반복 작업을 단순화 시킬 수 있다. 위의 틀린 문제도 for문으로 반복문으로도 구현 가능했는데 map함수를 이용하는 것이 더 간단한 코드인것같다. 특히 map 함수는 각요소에 동일한 연산을 적용할 때 유용함
3)fnGCD 함수
두 정수 A,B의 최대공약수 GCD를 재귀적으로 계산하는 함수.
function fnGCD(a, b){
return (a%b)? fnGCD(b, a%b) : b;
}
다음은 역시 내가 틀린 코드의 일부분이다. 기약분수를 더하는 과정에서 최대공약수로 나누는 방법을 몰랐다.
설명하자면 A,B를 인수로 받고 일단 A%B를 계산한다. 만약 나누어 떨어진다면 B가 최대 공약수임.
그러나 나누어 떨어지지 않으면 이번에는 A에 B를 넣고 B에 A%B를 대입해 반복해서 최대공약수를 찾는다.
function fnGCD(a, b){
return (a%b)? fnGCD(b, a%b) : b;
}
function solution(denum1, num1, denum2, num2) {
let denum = denum1*num2 + denum2*num1;
let num = num1 * num2;
let gcd = fnGCD(denum, num); //최대공약수
return [denum/gcd, num/gcd];
}
사실 저 재귀적 어쩌고 저 원리는 모르겠는데 왠지 초등학교때 배운거같은 느낌이다. 걍 외우는 걸로.
'TIL' 카테고리의 다른 글
231024 TIL) reduce, 올림, 내림, 반올림 수학함수 (0) | 2023.10.24 |
---|---|
231021) TIL #5 FETCH, FILTER (0) | 2023.10.21 |
231020) TIL #4 DOM (0) | 2023.10.20 |
231018) TIL #2 연산자 정리 (0) | 2023.10.18 |
231017) TIL #1 변수개념 정리 (0) | 2023.10.18 |