본문 바로가기
개발이야기/알고리즘

[알고리즘] 프로그래머스 과일 장수

by KimHarry 2023. 2. 5.

1. 조건

k, m 숫자 2개,  score 배열 1개가 조건으로 주어진다.

다 작성했나? 생각하고 검토하는 과정에서

k가 쓰이지 않아 예외처리 할게 남아있나? 계속 고민하다가 그냥 제출했는데 통과했다.

사실 k가 왜 있는지 모르겠다.... 음.... 아시는 분?

 

이 문제는 조건들의 사이즈가 여유로워서

시간복잡도를 고민하지 않아도됐다.

 

2. 풀이 과정

맨 처음 풀이는 배열을 하나하나 만들고 슬라이싱 하여 집어넣고

만들었둔 배열들의 마지막 인덱스를 result에 일일히 더했는데

 

다 완성하고 보니 굳이 배열을 하나하나 만들지 않고

마지막 인덱스부분만 result에 더해주고 다음 루프로 넘어가면 되는거였는데

생각없이 푼 것 같아 좀 자괴감 든다.

 

3. 첫번째 풀이

function solution(k, m, score) {
  if (score.length === 0) return 0

  const sortedScore = score.sort((a, b) =>  b - a) 
  const packageMount = parseInt((sortedScore.length) / m, 10)
  const packages = []
  let result = 0

  for (let i = 0; i < packageMount; i += 1) {
    const packaged = []

    for (let j = 0; j < m; j += 1) {
      packaged.push(sortedScore[(i * m) + j])
    }

    packages.push(packaged)
  }

  for (let i = 0; i < packages.length; i += 1) {
    result += (packages[i][m - 1] * m)
  }
  
  return result
}

solution(3, 4, [1, 2, 3, 1, 2, 3, 1])
solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])

 

4. 개선한 풀이

function solution(k, m, score) {
  if (score.length === 0) return 0;

  const sortedScore = score.sort((a, b) => {return b - a})
  const packMount = parseInt((sortedScore.length / m), 10)
  let result = 0

  for (let i = 0; i < packMount; i += 1) {
    result += sortedScore[(i * m) + (m - 1)] * m
  }

  console.log(result)
}

solution(3, 4, [1, 2, 3, 1, 2, 3, 1])
solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])