카테고리 없음
[프로그래머스 Lv.1] 과일장수 Slice, 배열 순회 for of
furaha
2023. 9. 2. 13:24
반응형
1. 문제
2. 생각흐름
1) 먼저 배열에 있는 숫자들을 큰 숫자 순서대로 새 배열에 m개씩 쪼개서 푸시해야겠다는 생각이 들었다
2) 큰 숫자들을 순서대로 정렬하려면? sort 메소드를 써야겠고
3) m개씩 쪼개서 새 배열에 어떻게 담아줄까 고민하다가 slice 메소드를 검색했고
4) slice 로 쪼갠 이후에 각 배열들을 최소값*길이값 연산해주는 순서대로 생각했다
여기서 slice 가 잘 생각이 나지 않았다.
slice 를 많이 써보지 않아서 어떤 메소드가 필요할지 검색의 도움을 받았고
4) 에서 [[배열], [배열], [배열]] 각 배열들을 for 문으로 순회하는 것에서 한 번 더 막혔다
이 또한 배열안의 배열을 순회하는 것을 검색했고, for of 를 보고 아,, 이럴 때 사용할 수 있지!! 싶었다
오류 1)
매개변수 충돌!!
매개변수로 score 를 받았는데, 그것과 별개로 함수 블록 안에서 let score 라는 이름을 선언했었다
그랬더니 에러가 나서 검색해보니까 매개변수와 새 변수 선언의 이름이 겹치면 충돌하기 때문에
왠만하면 같은 이름을 짓지 않아야 한다고 한다
오류 2)
답안을 제출할 때, console.log() 로 중간 중간 답을 확인한 것들을 그대로 제출했는데
출력물이 너무 많다고 오류가 난다고 한다. 그래서 콘솔들을 다 지워주었더니 잘 제출이 되었다!!
3. 풀이
function solution(k, m, score) {
var answer = 0;
let box = [];
// 배열을 오름차순으로 정렬
const array = score.sort((a,b) => b - a)
// 오름차순된 배열을 m개씩 자르기
for(i = 0; i < array.length; i += m){
box.push(array.slice(i, i + m));
}
// 각 잘라진 배열의 최솟값과 갯수 곱하기
for(const subArray of box){
if (subArray.length == m){
const minValue = Math.min(...subArray);
answer += minValue * m
}
}
return answer;
}
solution(3,4,[4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])
4. 알게 된 점
slice 와 for of 의 쓰임새를 다시 한 번 알게되었다
반응형