매개변수 : array
=> 자연수를 담은 배열, commands
=> 배열안에 배열안에 자연수
배열 array
의 i
번째 숫자부터 j
번째 숫자까지 자르고 정렬했을 때,
k
번째에 있는 수를 구한다.
예를 들어,
배열인 array
가 [ 1, 5, 2, 6, 3, 7, 4 ]
commands
인 배열안에 첫번째 원소인 2, 5, 3이 i=2
, j=5
, k=3
이라면,
array
의 2번째부터 5번째까지 자르면 [ 5, 2, 6, 3 ]이다.배열 array
, [ i, j, k ]
를 원소로 가진 2차원 배열 commands
가 매개변수로 주어질 때,
commands
의 모든 원소에대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return
해라.
array
의 길이는 1이상 100이하이다.array
의 각 원소는 1이상 100이하이다.commmands
의 길이는 1이상 50이하이다.commmands
의 각 원소는 길이가 3이다.
function solution(array, commands) {
var answer = [];
for(let i = 0; i < commands.length; i++) {
// console.log(commands[i][0])
let arr = array.slice(commands[i][0] -1, commands[i][1]).sort((a, b) => a - b).at(commands[i][2] -1)
// console.log(arr)
answer.push(arr)
}
return answer;
}
문제 설명
1. 배열안에 배열안에 들어있는 원소를 꺼내기 위해 for
문을 사용해 commands
의 길이만큼 반복문을 돌려주었다.
2. console.log
를 찍어 commands
의 값들을 확인했다.
3. arr
라는 변수를 만들어 매개변수 array
에 첫번째로 해 줄 잘라주기 위해 slice
메소드를 사용해 값을 잘라주었다.
( index
가 0부터 시작하기에 첫번째 원소는 -1
를 해주었다. )
4. 두번째로는 정렬을 하기 위해 sort
메소드를 사용했다.
5. 그리고 세번째 원소값으로 값을 추출해오기 위해 at
메소드를 사용하였다.
6. 빈 배열인 answer
변수에 push
메소드를 사용해 arr
변수를 배열안에 추가 하고 return
해 주었다.
느낀점
1. sort
를 사용할 때 그냥 sort()
로만 적어주었다.
출력했을 때는 통과가 나왔지만, 제출을 했을 때는 탈락이 나왔다.
그래서 sort()
에 오름차순 정렬해주는 공식 반환값을 넣어주었다.
2. 마지막 at
라는 메소드는 원래 indexOf
, find
, filter
여러 가지를 생각했지만, 값을 가져오기에 적절하다 생각한 메소드가 at
라는 생각에 at
메소드를 사용했다.
.at() 메소드
3. 문제의 요점들을 파악하고 이해한 후, 공책 또는 머릿속 또는 주석으로 순서도를 정해놓고 코드를 적어보자.
처음에는 array
매개변수를 for
문으로 돌리고 commands
매개변수를 이중 for문
을 돌렸다.
아니라는 것을 깨닫고 문제를 다시한번 더 보고 이해하고 코드를 쳐나가기 시작했다.