카테고리 없음

[프로그래머스 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 의 쓰임새를 다시 한 번 알게되었다

반응형