-> 가장 긴 문자열을 담는 변수를 따로 만들지 않아도 됨
// Q. 문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열을 리턴해야 합니다.
// A.
function getLongestElement(arr) {
return arr.reduce((acc, cur) => {
if (acc.length < cur.length) {
return cur; // cur의 길이가 더 길면 acc를 cur으로 교체
}
return acc;// 그렇지 않다면 acc를 그대로 유지
}, '')
}
-> reduce 밖에서 filter 사용 or reduce 안에서 조건문 사용
// Array.filter 사용
function sumOfArraysInArray(arr) {
const joinedArr = arr.reduce(function (acc, cur) {
return acc.concat(cur);
});
const onlyNumbers = joinedArr.filter(function (el) {
return typeof el === 'number';
});
return onlyNumbers.reduce(function (acc, cur) {
return acc + cur;
}, 0);
}
// Array.reduce 안에서 조건문 사용
function sumOfArraysInArray(arr) {
let newArr = arr.reduce((acc, cur) => {
return acc.concat(cur);
}, []);
return newArr.reduce((acc, cur) => {
if (typeof cur === 'number') {
return acc + cur;
}
return acc;
}, 0)
}
->기본값 true, 조건에 맞지 않을 때 false로 바꿔줌
// Q.수를 요소로 갖는 배열을 입력받아 각 요소가 그 이전의 요소들의 합보다 큰지 여부를 리턴해야 합니다.
// A.
function superIncreasing(arr) {
let result = true;
arr.reduce((acc, cur) => {
if (acc >= cur) {
result = false;
}
// 한번 false가 되면 다시 true로 바꿔주는 명령문이 없으므로
// 하나라도 조건에 맞지 않으면 false 반환
return acc + cur;
})
return result;
}
ex. 주의3의 예제
acc: acc + cur
cur: 배열 요소
result: true/false
무한루프 조심(num2 = 0이면 무한루프)
function modulo(num1, num2) {
if(num2 === 0) {
return 'Error: cannot divide by zero';
}
// 조건이 true이면 계속 돌아라
// false이면 다음 코드로 이동
while(num1 >= num2) {
num1 = num1 - num2;
}
return num1;
}
// Q. 문자열을 요소로 갖는 배열을 입력받아 문자열을 세로로 읽었을 때의 문자열을 리턴해야 합니다.
// A.
// 조건에 따라 배열에 추가
function readVertically(arr) {
// 빈 배열에 인덱스가 같은 것끼리 모음
let newArr = [];
for(i = 0; i < arr.length; i++) {// arr = [hi, world, hello]
for (j = 0; j < arr[i].length; j++) {// newArr = [hwh, ioe, rl, ll, do]
if (!newArr[j]) {
newArr.push(arr[i][j]);
} else {
newArr[j] = newArr[j] + arr[i][j];
}
}
}
//합침
return newArr.join('');// 'hwhioerllldo'
}
// Q. 문수를 입력받아 제곱근 값을 소수점 두 자리까지 리턴해야 합니다. Math.sqrt 사용은 금지됩니다.
// A.
// 적용하고 싶은 것을 미리 배열에 담아 놓음
function computeSquareRoot(num) {
const diffs = [1, 0.1, 0.01, 0.001];
let base = 1;
for (let i = 0; i < diffs.length; i++) {
while (base * base < num) {
base = base + diffs[i];
}
if (base * base === num) {
return base;
} else {
base = base - diffs[i];
}
}
return Number(base.toFixed(2));
}