728x90
1. 문자열 거꾸로 만들기
(예시)
console.log(reverse("awesome")); // 'emosewa'
console.log(reverse("rithmschool")); // 'loohcsmhtir'
(코드)
function reverse(str) {
if (str.length === 0) return "";
return reverse(str.slice(1)) + str[0];
}
2. 문자가 대칭인지 확인하기
(예시)
console.log(isPalindrome("awesome")); // false
console.log(isPalindrome("foobar")); // false
console.log(isPalindrome("tacocat")); // true
console.log(isPalindrome("amanaplanacanalpanama")); // true
console.log(isPalindrome("amanaplanacanalpandemonium")); // false
console.log(isPalindrome("awwa")); // true
(코드)
function isPalindrome(str) {
if (str.length === 1) return true;
if (str.length === 2) return str[0] === str[1];
if (str[0] === str.slice(-1)) return isPalindrome(str.slice(1, -1));
return false;
}
3. 주어진 콜백함수를 만족하는 요소가 있는지 찾기
(예시)
const isOdd = (val) => val % 2 !== 0;
console.log(someRecursive([1, 2, 3, 4], isOdd)); // true
console.log(someRecursive([4, 6, 8, 9], isOdd)); // true
console.log(someRecursive([4, 6, 8], isOdd)); // false
console.log(someRecursive([4, 6, 8], (val) => val > 10)); // false
(코드)
function someRecursive(arr, cb) {
if (arr.length === 0) return false;
if (cb(arr[0])) return true;
return someRecursive(arr.slice(1), cb);
}
4. 배열 벗기기
(예시)
console.log(flatten([1, 2, 3, [4, 5]])); // [1, 2, 3, 4, 5]
console.log(flatten([1, [2, [3, 4], [[5]]]])); // [1, 2, 3, 4, 5]
console.log(flatten([[1], [2], [3]])); // [1,2,3]
console.log(flatten([[[[1], [[[2]]], [[[[[[[3]]]]]]]]]])); // [1,2,3]
(코드)
function flatten(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
newArr = newArr.concat(flatten(arr[i]));
} else {
newArr.push(arr[i]);
}
}
newArr = newArr.concat(flatten())
return newArr;
}
5. 각 배열의 맨 앞글자만 대문자로 쓰기
(예시)
console.log(capitalizeFirst(["car", "taco", "banana"])); // ['Car','Taco','Banana']
(코드)
function capitalizeFirst(array) {
if (array.length === 1) {
return [array[0][0].toUpperCase() + array[0].substr(1)];
}
const res = capitalizeFirst(array.slice(0, -1));
const string =
array.slice(array.length - 1)[0][0].toUpperCase() +
array.slice(array.length - 1)[0].substr(1);
res.push(string);
return res;
}
6. 짝수만 뽑아서 더하기
(예시)
var obj1 = {
outer: 2,
obj: {
inner: 2,
otherObj: {
superInner: 2,
notANumber: true,
alsoNotANumber: "yup",
},
},
};
var obj2 = {
a: 2,
b: { b: 2, bb: { b: 3, bb: { b: 2 } } },
c: { c: { c: 2 }, cc: "ball", ccc: 5 },
d: 1,
e: { e: { e: 2 }, ee: "car" },
};
console.log(nestedEvenSum(obj1)); // 6
console.log(nestedEvenSum(obj2)); // 10
(코드)
function nestedEvenSum(obj) {
let num = 0;
const keys = Object.keys(obj);
for (const value of keys) {
if (obj[value] instanceof Object) {
num += nestedEvenSum(obj[value]);
} else {
if (obj[value] % 2 === 0) {
num += obj[value];
}
}
}
return num;
}
7. 숫자 string타입으로 변경하기
(예시)
let obj = {
num: 1,
test: [],
data: {
val: 4,
info: {
isRight: true,
random: 66,
},
},
};
console.log(stringifyNumbers(obj));
/*
{
num: "1",
test: [],
data: {
val: "4",
info: {
isRight: true,
random: "66"
}
}
}
*/
(코드)
function stringifyNumbers(obj) {
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
const temp = obj[keys[i]];
if (temp === +temp) {
obj[keys[i]] = temp.toString();
} else {
stringifyNumbers(obj[keys[i]]);
}
}
return obj;
}
8. string값들만 배열에 넣어주기
(예시)
const obj = {
stuff: "foo",
data: {
val: {
thing: {
info: "bar",
moreInfo: {
evenMoreInfo: {
weMadeIt: "baz",
},
},
},
},
},
};
console.log(collectStrings(obj)); // ["foo", "bar", "baz"])
(코드)
function collectStrings(obj) {
const answer = [];
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i++) {
if (obj[keys[i]] instanceof Object) {
if (collectStrings(obj[keys[i]]).length) {
answer.push(...collectStrings(obj[keys[i]]));
}
} else {
answer.push(obj[keys[i]]);
}
}
return answer;
}
728x90
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘] 버블정렬, 선택정렬, 삽입정렬 (0) | 2022.11.17 |
---|---|
[알고리즘] 선형검색, 이진검색 (0) | 2022.11.15 |
[알고리즘] 재귀함수 (0) | 2022.11.14 |
[알고리즘] 문제 모음 (0) | 2022.11.02 |
[알고리즘] 연속된 수를 더해서 가장 큰 값 찾기 (0) | 2022.11.02 |