문제풀이

프로그래머스 JS I 1단계 : K번째 수

HYEMBURGER 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이 되는 것.

 

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

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

 

 


 

 

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

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

오늘도 힘냈다! 아자!