ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 JS I 1단계 : K번째 수
    문제풀이 2023. 1. 11. 18:58

     

     

    프로그래머스 1단계 문제

    K번째 수

     

    array 라는 배열에 담긴 숫자(요소)들.

    이 숫자들을 commands에 들어있는 배열 안 요소를 사용하여 연산하기.

     


     

    💭

    어떻게 풀까?

    1. commands는 다중 배열이므로 각각 사용할 수 있도록 해야한다. (-> forEach를 사용하여 한 요소씩 확인-사용)

    2. array에 담긴 배열을 commands안의 요소 [i, j, k] 배열을 사용하여 잘라야 한다. (-> slice 사용 - 여기서 이름 헷갈려서 splice 써놓고 왜 안되냐고 고민함... 민망)

    2-2. slice 의 조건은 i-1(index는 0부터 시작해야 하므로) 부터 j까지(end 조건인 j는 포함되지 않으므로 -1 해주지 않아도 된다) 로 설정한다. 

    3. 빈 배열인 answer에 push 한다.

    4. 완성된 answe을 return 한다.

     

    완성 코드 👇

    막혔던 부분💭

    slice 대신에 splice를 사용했다.  (ㅋㅋㅋ ㅠㅠ)

    단순히 이름이 헷갈려서 사용했는데 ... 그럴수록 한 번 더 읽고 넘어가야 하는 법~ (왜이렇게 비슷하게 생겼냐고~)

     

    slice(begin, end) 

    slice는 begin 부터 end 전까지의(end번째는 포함되지 않음) 요소에 대한 새로운 배열로 반환한다.

    즉, 원본 배열은 바뀌지 않는다.

     

    splice(start, [deletecount, [item, [item2 ... ]])

    배열에서 요소를 추가, 삭제, 교체해서 배열의 내용을 변경한다.

    즉, 원본 배열이 변경된다.

     


     

    다르게는 못풀까?💭

    forEach 메서드 대신에 map을 사용해서 풀 수 있지 않을까?

    map도 요소 각각에 함수를 호출한 결과를 모아서!! 배열로 반환하니까.

    그래서 풀어봤다.

    근데 전체적으로 달라지는 건 거의 없었다 ...

    answer 변수를 굳이 만들지 않았다는 것과 (대신 가독성을 너무 해치는 느낌이라 arr 변수를 만들어서 정리했다)

    forEach 자리에 map이 들어갔다는 것 정도...

    또 다른 방법은 없을까~ 생각해봐야겠다.

     


     

     

    다른 사람 풀이👏

    댓글도 많고~ 추천도 많은~ 신기한 풀이가 있어서 가져와봤다.

     

    function solution(array, commands) {
        return commands.map(command => {
            const [sPosition, ePosition, position] = command
            const newArray = array
                .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
                .sort((a,b) => a - b)    
    
            return newArray[position - 1]
        })
    }

     

    풀이, 댓글을 읽고 궁금한 점이 생겨서 남겨둔다.

     

    * 구조 분해 할당 ?

    구조 분해 할당 < 이 대단하다! 라는 댓글이 꽤나 보였다.

    그걸 읽은 나 : 구조 분해 할당 ... ? 그게 뭔데 ... 

    일단 뭐든지 MDN부터 찾아보는 법 .. 당장 찾아봤다 🤸🏻링크

    구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.
    객체 및 배열 리터럴 표현식을 사용하면 즉석에서 쉽게 데이터 뭉치를 만들 수 있습니다.
    //MDN 예문
    let a, b, rest;
    [a, b] = [10, 20];
    
    console.log(a);
    // expected output: 10
    
    console.log(b);
    // expected output: 20
    
    [a, b, ...rest] = [10, 20, 30, 40, 50];
    
    console.log(rest);
    // expected output: Array [30, 40, 50]

     

    구조 분해 할당이 사용된 곳이

    const [sPosition, ePosition, position] = command;

    라는 걸 알 수 있다.

     

    command 는 commands 각각의 요소가 담길 변수의 이름이다.

    command에 담길 각각의 요소는 세 개의 숫자(요소)가 담긴 배열이다.

    예를 들어, command가 현재 [1,2,3]이라면 sPositon = 1 / ePosition = 2 / position = 3이 되는 것.

     

    필요한 데이터들에 손쉽게 이름을 붙여서 사용할 수 있다!

    하지만 응용해야 할 때 응용할 수 있을 것인가 ... 그건 두고봐야 할 것 같다. 

     

     


     

     

    그밖에도 좋은 코드란 뭘까 라는 어떤 코드일까 ... 라는 고민이 생기고 있다.

    이것도 언제 한 번 생각정리 겸 포스팅해봐야겠다!

    오늘도 힘냈다! 아자! 

     

     

     

     

     

    댓글

Designed by Tistory.