꾸준하게
[JS코테] 과일 장수 본문
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[나의 풀이]
function solution(k, m, score) {
if (m > score.length) {
return 0;
}
let result = [...score].sort((a,b) => a-b);
result.splice(0, result.length % m);
result.sort((a,b) => b-a);
result = result.map((item, index, array) =>
index+1 <= m ? array[m-1]
: (index+1) % m ? array[parseInt((index+1) / m)*m + m - 1]
: item);
return result.reduce((a,b) => a+b);
}
[다른 풀이]
solution = (_, m, s) => s.sort().filter((_, i) => !((s.length - i) % m)).reduce((a, v) => a + v, 0) * m
[다른 풀이 분석!]
1) s.sort()
받은 배열 자체를 수정하는 것은 지양하는 것이 좋기 때문에 나는 스프레드 연산자를 사용했다.
또한 sort()만 사용하면 문자열 오름차순이므로 [1,2,10].sort() 시 [1,10,2]가 되기에 sort((a,b) => a-b를 사용했는데,
다시 보니 문제에 score의 숫자는 1이상 9이하로 정해져 있어서 그냥 sort()만 써도 상관 없었다.
2) .filter((_, i) => !((s.length - i) % m))
나는 문제를 풀 때 [1,2,3,1,2,3,1]이면 sort로 [3,3,2,2,1,1,1]이 되고
여기서 m의 배수가 아닌 것들을 그 다음 중 가장 근처 배수의 숫자로 바뀌게 풀어내느라 엄청 고생했는데,
이 분은 sort 이후에 아예 m의 배수만 남겨두고 reduce로 값을 더한 후 *m을 해버렸다.
그리고, s.sort((a,b) => b-a).filter((_,i) => !((i+1)%m).reduce((a,v) => a+v,0)과 같은 값이 나온다.
아무래도 sort()를 간결히 하기 위해 뒤의 filter에서 !((s.length - i) % m)이렇게 풀어낸 것 같다.
배수만 필터링으로 남겨두는 방법, 신선하다!
'JS코딩테스트' 카테고리의 다른 글
[JS코테] 모의고사 - 다시 확인❗ (0) | 2024.01.03 |
---|---|
[JS코테] 2016년 (2) | 2024.01.02 |
[JS코테] 카드 뭉치 (0) | 2023.08.29 |
[JS코테] 명예의 전당 (1) (0) | 2023.08.01 |
[JS코테] 해시 - 폰켓몬 (0) | 2023.06.16 |