Udemy - 재귀 심화문제
허허….😅
1️⃣ reverse ( 거꾸로 출력하기 )
입력된 String을 거꾸로 출력하는 재귀함수 알고리즘을 작성!
1 | function reverse(input) { |
2️⃣ isPalindrome ( 앞뒤가 똑같은 단어 찾기 )
주어진 String 입력값이 앞뒤로 반전을 해도 같은 단어라면 true를, 아니라면 false를 출력하는 재귀 함수 작성
1 | function isPalindrome(input) { |
3️⃣ someRecursive ( 하나라도 만족하는가? )
주어진 배열 입력값 중에, 주어진 조건을 하나라도 충족하면 true를, 아니면 false를 출력하는 재귀함수 알고리즘을 작성하시오
1 | function someRecursive(arr, callback) { |
4️⃣ flatten ( 중첩 배열 풀어내기 )
[ [ ], [ [ ] ]]
와 같은 중첩 배열들을 하나의 배열로 풀어서 반환하는 재귀함수 알고리즘을 작성하시오
- 나의 솔루션
1
2
3
4
5
6
7
8
9
10
11// 뭐가 문제인지는 모르겠으나... 나의 솔루션은 계속 알 수 없는 오류가 난다.
function flatten(arr) {
// 새로운 배열을 반환해야 한다고 했으니 일단 newArr에 담아준다.
let newArr = arr;
// 만약 모든 요소 중 어떤 것도 배열이 아니라면? => 해당 newArr 반환
if (!newArr.some((el) => Array.isArray(el))) {
return newArr;
}
// 위의 조건 통과하지 못하면 -> newArr를 flat해서 다시 재귀
return flatten(newArr.flat());
} - 제시된 솔루션
1
2
3
4
5
6
7
8
9
10
11
12
13function flatten(oldArr) {
let newArr = [];
for (let i = 0; i < oldArr.length; i++) {
if (Array.isArray(oldArr[i])) {
// 여기서는 concat을 사용했다.
// concat 안에서 재귀가 이뤄진다.
newArr = newArr.concat(flatten(oldArr[i]));
} else {
newArr.push(oldArr[i]);
}
}
return newArr;
}
5️⃣ capitalizeFirst ( 첫 글자 대문자로 바꾸기 )
주어진 배열 내의 String들의 첫 글자를 대문자로 바꾸는 재귀함수 알고리즘을 작성하시오
- 아스키 코드 (10진수)
- A-Z : 65~90
- a-z : 97~122
1 | function capitalizeFirst(arr) { |
6️⃣ nestedEvenSum
nested 오브젝트 내에 존재하는 모든 짝수 value들의 합을 구하는 재귀함수 알고리즘을 작성하시오
- 주어진 object 1과 2
1 | // typeOf Object를 활용하면 될 것 같다. |
7️⃣ capitalizeWords (모든 문자 대문자화)
배열에 담긴 모든 문자열들을 대문자로 치환하는 재귀함수 알고리즘을 작성하시오
1 | function capitalizeWords(arr) { |
8️⃣ stringifyNumbers
nestedObject의 values들 중에 ‘숫자’인 값들을 찾아서 모두 stringify하여 반환하는 재귀함수 알고리즘을 작성하시오
💡 Array를
typeof
를 통해 검사하면‘object’
가 반환된다는 것을 처음 알았다….
1 | // 처음엔 그냥 기존 obj를 수정하는 방식으로 했는데, TDD에서 원본 오브젝트는 건들지 말란다... |
9️⃣ collectStrings ( String만 모으기 )
주어진 nestedObject 안에서 String Value값들만을 한 배열에 모아서 반환하는
재귀함수 알고리즘을 작성하시오
1 | // 최종 리턴할 배열을 arr=[]와 같이 입력해줬다. |