문제

과일장수 문제 js

노엠디엔 2023. 7. 4. 11:11

오랜만에 풀어본 문제 자바스크립트에서 제공하는 메서드를 사용하지 않는 방법으로 풀어보았다.

customSort함수는 내림차순으로 정렬해 주는 함수, createNestedArray 함수는 제시하는 배열과 숫자로

배열의 길이만큼 돌면서 제시한 숫자만큼 잘라 2중 배열을 만들어준다. 만약 문제에서 제시하는 상황에 맞게 
상자 안에 들어가는 사과 개수에 미치지 못한다면 (if array.length - count < 0)으로 break를 해주었다.

그렇게 짜인 배열을 다 돌면서 배열 안에 있는 2중 배열요소에서 customMin이라는 함수를 통해 
가장 작은 수를 찾아 그 수와 한 상자에 들어가는 사과갓수를 곱해 계속해서 answer에 더해주었다.

이렇게 풀었더니 시간적인 문제인지 테스트 11,12,13,14,15,16에서 해결되지 못했다.

문제를 다시 읽고 여러 번 다른 방법으로 시도해 보았지만 해결이 안 되어서 
다른 분의 풀이를 보니 충격이었다.

 

일단 처음에 내림차순으로 정렬하는 것은 똑같고 정렬된 배열에서 slice코드를 사용해서 현재 자리에서+m만큼을 더해
사과가 한 박스에 들어가는 개수만큼 i를 증가시키면서 slice 되는 배열의 마지막 지점도 같이 설정해 주었다.

그렇게 만들어진 2중 배열을 다시 반복문을 돌면서 해당 요소의 배열의 길이가  m과 같다면 즉,
한 상자에 들어가는 사과 개수와 같다면 answer에 해당 2중 배열의 [m-1] 즉 최저숫자 어차피 해당 배열의 마지막 요소는
최저숫자일 것이므로 그 수를 *m과 곱해서 더해주고 있다. 
내가 작성한 코드에서 createdNestedArray에 나오는 if(array.length < count <0) break 배열의 길이가 한 상자의 들어가는 사과 개수와 맞지 않는다면 배열을 만들지 않는 부분이 여기서는 (arr [j]. length === m) 이 처리해 주는 것이다.

또 이렇게 짧게 코드를 간결하게 짠 것에 충격이었다.  현타;;;