algorithm - 2

김린네·2022년 2월 20일

1)

const isSubsequence = function (arr1, arr2) {

const ab = {};
const ac = {};
for (var word in arr1) {
    ab[word] = arr1[word];
}

//ab 객체에 in 을 사용해서 keu- value 를 같이 주었다.

for (var worc in arr2) {
    ac[worc] = arr2[worc];
}

//ac 에 key-value 준거

var point_f = 0;
var point_s = 0;



while (point_s < arr2.length) {
    if (ab[point_f] != ac[point_s]) {
        ++point_s;
    }
    else if (ab[point_f] == ac[point_s]) {
        delete ab[point_f];
        ++point_f;

    }


}

//내가 짠 코드인데 기억이 안나네 칙쇼 ;ㅋㅋㅋ
// 기준을 ab 로 하고 ab value와 ac value 가 같으면
// ab안에 있는 key- value 자체를 지운다.
// 여기서 기준은 ac- point_s 와 연관되어있다는것이고

if (Object.keys(ab).length === 0) {
    return true;
}
else {
    return false;
}

}
//길이가 0 이면 true 를 반환하는 문제

console.log(isSubsequence('hello', 'hello world'));
console.log(isSubsequence('sing', 'sting'));
console.log(isSubsequence('abc', 'abracadabra'));
console.log(isSubsequence('abc', 'acb'));

2)


-연속된 수 중에서 가장 큰 수를 찾아서 반환하거라 라는 문제이다.

const maxSubarraySum = function (arr1, point) {
var point_f = 0;
var point_ff = point;
var original = 0;

if (arr1.length < point) {
    return null;
}
for (var i = 0; i < point; i++) {
    original += arr1[i];
}

//보니까 마지막에 arr1 에 담은 것을 배출해라 이런거 같음

var max = original;

// 전체를 for 문을 돌려서 가는게 아니고 선생님이 알려준 방식을 사용하는데
기존에 있던 것을 불러와서 비교할려고 하니 안되서 하나의 변수가 original 의값을 복사하는 식으로 하였다.

while (point_f < arr1.length - 1) {
    original = original + arr1[point_ff] - arr1[point_f];
    if (max < original) {
        max = original;
    }
    ++point_f;
    ++point_ff
}
return max;

}

console.log(maxSubarraySum([100, 200, 300, 400], 2));
console.log(maxSubarraySum([1, 4, 2, 10, 23, 3, 1, 0, 20], 4));
console.log(maxSubarraySum([-3, 4, 0, -2, 6, -1], 2));
console.log(maxSubarraySum([3, -2, 7, -4, 1, -1, 4, -2, 1], 2));

console.log(maxSubarraySum([2, 3], 3));

3)

문제 해석 배열안에 있는 것을 더해서 두번째 매개변수가 되거나 더 큰수가 되야되는데 이런 경우 배열안에 있는 몇개의 수를 사용해야 되는가? 에 대한 문제

contiguous-> 연속한 ->

const minSubArrayLen = function (arr1, point) {
var sum = 0;

var point_f = 0; //이 친구가 움직이는걸로 하구;
var number = 1; //몇개씩 잡아야 되겟냐?
var i = 0;

//for 문으로 돌릴려고 했는데 안돌아가서 하나씩 증가하면서 while 문을
빠져나가는 것을 사용하니 됬다 .
// 1나만 나오는 경우를 만든것이다.

while (i < arr1.length - 1) {
    ++i;

    if (arr1[i] > point) {
        return 1;
    }

}

//main 함수 - > 여기가 중요하다.

while (sum < point) {

//sum-> 즉 수가 커지면 while 문을 빠져 나가는 식으로 한거

//어쩌피 하나로는 가능 하지 않다는 것을 발견했으니 배열 index 가 1 인거
부터 하나씩 더해나가 볼까?->지금보니까 number가 움직이는 식이네

    sum += arr1[number + point_f] + arr1[point_f];
    if (sum >= point) {
        break;
    }

    ++number;

//이동 하는 number가 끝까지 갓으면 다시 초기화를 시키고 point_f 의 수를
하나증가시켜서 이동시키는 것 처럼 하자

    if (number > arr1.length - 1) {

        ++point_f;
        number = 1;
        sum = 0;
        return 0;
    }


}
return number;

}

console.log(minSubArrayLen([2, 3, 1, 2, 4, 3], 7))
console.log(minSubArrayLen([2, 1, 6, 5, 4], 9))
console.log(minSubArrayLen([3, 1, 7, 11, 2, 9, 8, 21, 62, 33, 19], 52))

console.log(minSubArrayLen([1, 4, 16, 22, 5, 7, 8, 9, 10], 39))
console.log(minSubArrayLen([1, 4, 16, 22, 5, 7, 8, 9, 10], 55))
console.log(minSubArrayLen([4, 3, 3, 8, 1, 2, 3], 11));
console.log(minSubArrayLen([1, 4, 16, 22, 5, 7, 8, 9, 10], 95))

재귀 문제



// fib(4) // 3
// fib(10) // 55
// fib(28) // 317811
// fib(35) // 9227465

  var list=[];
 const arr_list_v=function(a)
{

const fib_v= function(ap){
            if (ap==0||ap==1)
           {  list[ap]=1 ;
                return 1;} 
          if(list.length!=a){
             list[ap]=fib_v(ap-1)+fib_v(ap-2)
      };
         return fib_v(ap-1)+fib_v(ap-2);
         
   
} 
var nmm=a-1;
console.log(fib_v(nmm) );
}
arr_list_v(4);
arr_list_v(10);
arr_list_v(28);
arr_list_v(35);

**여기 부분 열심히 했는데 max size 가 왜 되는지 모르겠다.. 아무래도 나중에 다시 봐야될거같다. 
**
profile
디자인 > https://dribbble.com/jongpil_77 코딩 > https://www.codewars.com/users/bikijjang

0개의 댓글