반응형
Notice
Recent Posts
Archives
Today
Total
Link
관리 메뉴

꾸준하게

[JS코테] 과일 장수 본문

JS코딩테스트

[JS코테] 과일 장수

DaeunCoding 2023. 12. 26. 21:16
728x90
반응형

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)이렇게 풀어낸 것 같다.

 

배수만 필터링으로 남겨두는 방법, 신선하다!

728x90
반응형

'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