티스토리 뷰
2021년 1월 11일에 Velog에 작성한 글을 옮겨온 글입니다.
프로그래머스 - k번째 수
배열 구조 분해 할당으로 직관적인 코드 짜기
풀이
Array 객체의 프로토타입 메서드를 사용하여, i번째 숫자부터 j번째 숫자까지 자르고(slice), 정렬한 후(sort), k번째에 있는 수를 리턴합니다.
Array.prototype.sort 함수는 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 비교하여 정렬하는데, 이 문제에서는 숫자 순으로 정렬해야 하므로 별도로 compareFunc를 전달해줍니다.
나의 풀이
function solution(array, commands) {
const compareFunc = (a, b) => a - b;
return commands.map(command => {
return array.slice(command[0] - 1, command[1]).sort(compareFunc)[command[2] - 1];
});
}
commands.map 콜백 함수의 첫 번째 인자 이름을 command로 하였는데, 코드를 짜면서도 command[index]로 접근하게 되어 해당 값이 무엇을 의미하는지 알아보기 힘들겠다는 생각을 했는데요.
다른 사람 풀이 차용
function solution(array, commands) {
const compareFunc = (a, b) => a - b;
return commands.map(([start, end, target]) => {
return array.slice(start - 1, end).sort(compareFunc)[target - 1];
});
}
다른 사람의 풀이를 보니 const [sPosition, ePosition, position] = command;로 배열 구조 분해 할당을 이용해 직관적으로 표현했더라구요. 이를 보고 차용하여 map의 콜백 함수에서 인자를 바로 start, end, target으로 분해 할당하여 받았습니다.
이외에 slice 함수 대신 filter 함수를 사용한 분들도 있었는데요. performance 면에서 slice 함수보다 filter 함수가 나은가 싶어서 찾아봤으나 오히려 slice 함수가 더 성능이 좋은 거 같아 이 부분은 그대로 두었습니다.
참고자료
slice vs filter performance
https://medium.com/@justintulk/javascript-performance-array-slice-vs-array-filter-4573d726aacb
https://measurethat.net/Benchmarks/Show/2692/0/slice-vs-filter#latest_results_block
'개발 > Algorithm' 카테고리의 다른 글
프로그래머스 | 124 나라의 숫자(JavaScript) (0) | 2021.06.16 |
---|---|
프로그래머스 | 파일명 정렬(JavaScript) (0) | 2021.06.14 |
프로그래머스 | 스킬트리(JavaScript) (0) | 2021.06.09 |
프로그래머스 | 튜플(JavaScript) (0) | 2021.06.07 |
구름 | 사은품 교환하기(JavaScript) (0) | 2021.06.04 |
- node fs
- 자바스크립트
- make-dir
- createAction
- errno 253
- javascript event
- JavaScript
- 웹팩 에러
- 인가
- ECONNRESET
- node cp -r
- ELIFECYCLE
- node mkdir -p
- node file package
- node rm -rf
- 인증
- 스터디
- Storybook Error
- jest
- Webpack Error
- 스토리북 에러
- file opener preference
- rimraf
- fs-extra
- external editor
- sass
- 페이지 특정 위치 link
- mkdirp
- 프로그래머스
- ModuleParseError: Module parse failed: Unexpected token