728x90
문제 설명
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 숫자를 구하려한다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때,
commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를
배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한 사항
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.
문제 풀이 방법
- command가 배열 형태이며 각각 시작점, 끝점, 선택할 번수 가 적혀있다.
- array를 command의 길이 만큼 분류하고 숫자를 선택하는 코드를 반복
주의 사항
- command에서 주어진 숫자는 -1을 해주어야 배열의 인덱스와 맞다.
- sort()를 사용해 정렬할 때는 일부 숫자가 정렬이 잘 안될 수 있으니 sort((a, b) => a-b) 처럼 사용해 주자
( 9와 80을 sort() 해주면 9보다 80이 앞으로 나온다 )
참고 문헌
- Array.prototype.push : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/push
- Array.prototype.slice : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
코드
function solution(array, commands) {
let answer = [];
for(let i=0; i<commands.length; i++){
const c = commands[i];
const arr = array.slice(c[0]-1, c[1]).sort((a,b)=> a-b);
arr.find((num, idx) => {
if(idx+1 === c[2])
answer.push(num);
})
}
return answer;
}
좋아 보이는 코드
function solution(array, commands) {
return commands.map(command => {
const [sPosition, ePosition, position] = command
const newArray = array
.slice(sPosition-1, ePosition)
.sort((a,b) => a - b)
return newArray[position - 1]
})
}
이 코드에서는 해체 할당의 사용을 보고 좋다고 느껴졌다.
원본 코드는 slice() 대신 filter()를 사용했지만,
가독성을 생각해서 slice()가 더 좋다 생각해 slice()를 사용했다.
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
정렬 / 2 / H-Index (JS) (0) | 2022.06.08 |
---|---|
정렬 / 2 / 가장 큰 수 (JS) (0) | 2022.06.08 |
해시 / 3 / 베스트앨범 (JS) (0) | 2022.06.07 |
해시 / 2 / 위장 (JS) (0) | 2022.06.07 |
해시 / 2 / 전화번호 목록 (Java) (0) | 2022.06.07 |