algorithm - 3 ->재귀함수 도전!문제!

김린네·2022년 2월 20일

좀 어려웟찌만 그래도
예쩐에는 ?
뭐임? 이랬는데
요즘은 흐름이 잘 보이는거 같아서 조금 발전 한거 같았다.

선생님이 아무생각없이 타자 치지 말고 생각!! 하고
계획 한다음 코드 쓰라고 하는데 진자 생각없이 쓰고 있다가
뭐하는거지!!
이러면서 반복중......
....ㅎ

> 문제해석 -> 말그대로 reverse 해서 나타내라는 말



var push_list = [];
const reverse = function (arr1) {
var list = arr1.split('')

받은 arr1을 array 하는 형식으로 바꾼다. -> 이때 자동으로 바꿔지니 또 안바꿔도 된다.!!!

push_list.push(list.pop());

어쩌피 array 의 마지막 부분만 사용하면 되니까 pop으로 부분만을 뺀다.
근데 이런 경우. ',' 가 string 에 포함되어 있어서 정답이 나오지 않는다. 따라서 replace 를 사용해서 바꿀려고 하니 . js가 반복된 것을 인식하지 못해서 하나만 바꿔준다고 한다. 그래서 /g<< 이것을 사용해서 바꿔줘야된다!!!

var neW_list = list.toString().replace(/,/g, '');

if (list.length < 1) {
    console.log(push_list.toString().replace(/,/g, ''))
    push_list = [];
    return;

}

reverse(neW_list);

문제 해석 -> 말그대로 양날개의 문자가 같은가? 아니면 false 같다면 true 를 반환하라는 문제 이다.

// isPalindrome('awesome') // false
// isPalindrome('foobar') // false
// isPalindrome('tacocat') // true
// isPalindrome('amanaplanacanalpanama') // true
// isPalindrome('amanaplanacanalpandemonium') // false

const isPalindrome = function (arr1) {
    var list = arr1.split('');
    var final = list.length - 1;
    if (list[0] != list[final]) {
        return false;
    }
    if (arr1.length < 1) {
        return true;
    }
    list.splice(-1, 1)


    list.splice(0, 1)
    
>     이부분이 핵심! splice 함수는 배열 자체를 수정할수 있으니 이것을 사용해서 금방 해결!
    
    var neW_list = list.toString().replace(/,/g, '');
> 수정한것을 다시 재귀 함수를 사용해서 돌아가게 만드는 과정이다. 


    return isPalindrome(neW_list);


}
console.log(isPalindrome('awesoma'));
console.log(isPalindrome('anessena'));
console.log(isPalindrome('tacocat'))
console.log(isPalindrome('amanaplanacanalpanama') )
console.log( isPalindrome('amanaplanacanalpandemonium') )







    //  reverse(arr1.pop())


}
reverse('awesome')
reverse('rithmschool')

// reverse('awesome') // 'emosewa'
// reverse('rithmschool') // 'loohcsmhtir'

 var list = [];
const flatten = function (arr1) {
    push_ob=[];
      // console.log(arr1.length)
     if(arr1.length<1){
         console.log('hey')
         return;
     }
       
           var push_ob=[];
  
       arr1.forEach((fianl,index)=>{
           
           if (typeof (fianl) == 'number') {

           list.push(fianl);
           //console.log(fianl)
           
         
              
        }   
       
        else if (Array.isArray(fianl)) {           
       
             // push_ob.push(fianl);
             // console.log(fianl)
          
              return flatten(fianl)
            
        }
                
       })
  
  // return flatten(push_ob);
       // return(push_ob)
       
        /*
        if(push_ob.length>0){
            return flatten(push_ob);
        }
   */
  
}

flatten([1, 2, 3, [4, 5]])
console.log(list)
list=[];
flatten([1, [2, [3, 4], [[5]]]])
console.log(list)

많이 고민해봤는데 list 를 비우는 과정을 아직 생각해내지 못했다.. 어찌됫든 .. 돌아가긴 하는데.....-> 답지 보고 수정해야되겠다.!!

------02/19

-03/08->
재귀 문제

23번

  
const obj = {
    stuff: "foo",
    data: {
        val: {
            thing: {
                info: "bar",
                moreInfo: {
                    evenMoreInfo: {
                        weMadeIt: "baz"
                    }
                }
            }
        }
    }
}
var ar = [];
const collectStrings = function (arr) {

    var cocountun
    for (var ob in arr) {


        if (typeof (arr[ob]) == 'string') {

            ar.push(arr[ob])
            //console.log(ar)
        }
        else if (typeof (arr[ob]) == 'object') {
            count = 1;
            collectStrings(arr[ob]);
        }
        else if (count != 1) {
            console.log('final')
            return ar;

        }

    }
    return ar
        ;
}
console.log(collectStrings(obj))

  const nestedEvenSum = function (arr) {


    var count;

    for (var ob in arr) {


        if (typeof (arr[ob]) == 'number') {

            arr[ob] = arr[ob].toString();
            // console.log(arr[ob], sum)
        }
        else if (typeof (arr[ob]) == 'object') {
            count = 1;
            nestedEvenSum(arr[ob]);
        }
        else if (count != 1) {

            return;

        }

    }


    return arr;

}
let obj = {
    num: 1,
    test: [],
    data: {
        val: 4,
        info: {
            isRight: true,
            random: 66
        }
    }
}

console.log(nestedEvenSum(obj))


var sum = 0;

const nestedEvenSum = function (arr) {




    for (var ob in arr) {


        if (typeof (arr[ob]) == 'number') {

            sum += arr[ob];
            // console.log(arr[ob], sum)
        }
        else if (typeof (arr[ob]) == 'object') {
            nestedEvenSum(arr[ob]);
        }


    }
    return sum;
}
var obj1 = {
    outer: 2,
    obj: {
        inner: 2,
        otherObj: {
            superInner: 2,
            notANumber: true,
            alsoNotANumber: "yup"
        }
    }
}
console.log(nestedEvenSum(obj1))
var sum = 0;
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(obj2))


const capitalizeFirst = function (arr, index = 0) {
    if (index == arr.length) {
        console.log(arr)
        return;
    }

    const arr_1 = arr[index].split('');

    var na = [];
    var nmae = arr_1.map((v, index) => {
        if (index == 0) {
            return (v.toUpperCase());

        }
        else {
            return v;
        }


    })
    arr.splice(index, 1);
    arr.splice(index, 0, nmae.toString().replace(/,/g, ''))
    ++index;

    capitalizeFirst(arr, index)
}
capitalizeFirst(['car', 'taco', 'banana'])
profile
디자인 > https://dribbble.com/jongpil_77 코딩 > https://www.codewars.com/users/bikijjang

0개의 댓글