ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] JavaScript 알고리즘 | Lv.0 마지막 두 원소
    ► JS Algorithm/Programmers 2023. 12. 5. 20:57
    반응형

    🔒 문제 설명

    정수 리스트 num_list 주어질 , 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

     


    🔒 제한사항

    • 2 ≤ num_list의 길이 ≤ 10
    • 1 ≤ num_list 원소 ≤ 9

     


    🔒 입출력 예

    num_list result
    [2, 1, 6] [2, 1, 6, 5]
    [5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]

     


    🔒 입출력 예 설명

    입출력 예 #1

    • 마지막 원소인 6이 그전 원소인 1보다 크기 때문에 6 - 1인 5를 추가해 return합니다.

    입출력 예 #2

    • 마지막 원소인 5 그전 원소인 7보다 크지 않기 때문에 5 배인 10 추가해 return합니다.

     


     

    🔐 solution of mine

    reduce()

          const solution = (num_list) => {
            let lastIndex = num_list.length - 1;            // 마지막 인덱스번호
            let lastNum = num_list[lastIndex];              // 마지막 인덱스 숫자
            
            let frontIndex = num_list.length - 2;           // 마지막의 앞 인덱스번호
            let frontNum = num_list[frontIndex];            // 마지막의 앞 인덱스 숫자
    
            let minus = lastNum - frontNum;                 // 마지막 두개 인덱스 값끼리 빼기
            let double = lastNum * 2;                       // 마지막 인덱스 값의 두배
    
            lastNum > frontNum ? num_list.push(minus) : num_list.push(double);      // 조건에 따라, 빼기 또는 두배 배열만들기
    
            return console.log(num_list);                          // output 배열
          };
    
          solution([2, 1, 6]); // expected output: [2, 1, 6, 5]
          solution([5, 2, 1, 7, 5]); // expected output: [5, 2, 1, 7, 5, 10]

     

     


     

    🔐 solution of others 

    reverse()

    [... ]

          function solution(num_list) {
            const [a, b] = [...num_list].reverse();                       // reverse()를 통하여 배열을 역순으로 바꿈 → 그러하여, a와 b가 배열 맨위의 숫자를 할당받을 수 있음
            return console.log([...num_list, a > b ? a - b : a * 2]);     // 조건식에 따라 마지막 인덱스에 삽입
          }
    
          solution([2, 1, 6]);       // expected output: [2, 1, 6, 5]
          solution([5, 2, 1, 7, 5]); // expected output: [5, 2, 1, 7, 5, 10]

     

    check point 1

    const [a, b] = [...num_list].reverse();     // 1안
    const [c, d] = num_list.reverse();          // 2안

      1안(a,b)과 2안(c,d)의 결과값은 같다. 왜냐면, 그냥 num_list배열을 그대로쓰는 1안이나,

    [...num_list]형식처럼 배열을 풀었다 다시 넣어주는 2안의 형태라서, 결론적으로 두가지 과정의 결과값은 같다.

      하지만 2안의 경우, 원본배열 num_list이 reverse()에 의해 변형된다.

    , 원본유지를 원하면 1, 원본이 바껴도되면 2안을 사용하면된다.

     

     check point 2

    return console.log([...num_list, a > b ? a - b : a * 2]);               // 1안
    
    num_list.push(a > b ? a - b : a * 2);                                   // 2안
    return console.log(num_list);     					// expected output: [2, 1, 6, 5]

     

      1안은 빈배열에 기존배열 num_list를 ...num_list 방식으로 풀어넣고, 조건식에 따라 뒤에 필요한 숫자를 추가하였다.

    한줄로 끝나는 간단한 형식이다.

      2안은 push()를 사용하여 기존 num_list배열에 필요한 숫자를 추가해줬다.

    push() 특성상 return에 직접 넣을수 없기때문에, 코드 한줄이 더 필요한 형태이다.

      이 부분이 제일 헷갈렸던 부분인데 그 이유를 아래에 추가적으로 설명했다

     

    ◆ push() 메소드 코드예시

    const answer = num_list.push(5);  // num_list = [2, 1, 6] 인 상태
    console.log(num_list.push(5));    // expected output: 4 → push(5)가 추가된, 총 배열길이
    console.log(answer);              // expected output: 4 → push(5)가 추가된, 총 배열길이
    console.log(num_list);            // expected output: [2, 1, 6, 5] → push(5)가 추가된, 변형된 num_list의 배열형태

      push의 경우 배열의 뒤로 원하는 요소들을 추가할 수 있는 메소드이다.

    하지만 push메소드를 그대로 출력할 경우에는, 변형된 num_list배열의 length를 반환한다.

    우리가 원하는 배열 그대로를 보고싶으면, 변형된 num_list배열를 그대로 출력하여야한다.

     

     


     

    반응형
Designed by Tistory.