1. 난이도: 프로그래머스 Level 1
2. 문제요약:
- 리스트(배열)를 slicing하고 indexing하라.
- 리스트(배열)를 조건에 맞게 sorting하라.
3. 문제핵심: 리스트(배열) 메서드를 잘 활용할 수 있는가
코드
function solution(array, commands) {
const answer = [];
commands.forEach(command=>{
let arr = array;
const [start, end, k] = command;
arr = arr.slice(start-1, end).sort((a,b)=>a-b);
answer.push(arr[k-1])
})
return answer;
}
- commands는 2차원 배열이고 commands의 원소 하나하나(1차원 배열, command)에 접근하기 위해서 forEach 메소드를 사용한다.
- 구조분해 할당을 해서 손쉽게 command안의 요소들을 start, end, k 변수에 할당한다.
- slice 메소드를 활용해서 slicing을 해준다.
- 오름차순으로 정렬하기 위해 sort((a,b)=>a-b)를 활용한다.
sort
1. arr.sort([compareFunction])
- compareFunction에 아무것도 적어주지 않으면,유니코드 값 순서대로 정렬되기 때문이다.
배열의 element들은 문자열로 취급되기 때문이다.
- 리턴 값은 compareFunction 규칙에 따라 정렬된 원본 배열(arr)이다.
2. (숫자) 정렬
1) 오름차순
arr.sort((a,b)=>a-b)
- 두 개의 원소인 a, b를 비교해서
- a>b이면 a가 b보다 먼저 오도록
- a==b이면 순서를 바꾸지 않고
- a<b이면 b가 a보다 먼저 오도록 정렬한다.
2) 내림차순
arr.sort((a,b)=>b-a)
- 두 개의 원소인 a, b를 비교해서
- a>b이면 b가 a보다 먼저 오도록
- a==b이면 순서를 바꾸지 않고
- a<b이면 a가 b보다 먼저 오도록 정렬한다.
3. (문자열) 정렬
1) 오름차순
arr.sort()
- sort()에 파라미터를 생략하면 원소를 문자열로 간주하고 오름차순 정렬한다.
2) 내림차순
arr.sort((a,b)=>{
if(a>b) return -1;
else if(a<b) return 1;
else return 0
})
- 두 개의 원소인 a, b를 비교해서
- a==b이면 순서를 바꾸지 않고
- a==b이면 순서를 바꾸지 않고
- a<b이면 b가 a보다 먼저 오도록 정렬한다.