코테연습

176. 과일장수 Javascript

hxunz 2023. 1. 18. 22:55

https://school.programmers.co.kr/learn/courses/30/lessons/135808?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
    과일 장수가 얻을 수 있는 최대 이익을 구하라
  • 주어진 자료는 무엇인가?
    k: 사과의 최대점수
    m: 한 상자에 들어가는 사과의 수
    score: 사과들의 점수
  • 조건은 무엇인가?
    3 ≤ k ≤ 9
    3 ≤ m ≤ 10
    7 ≤ score의 길이 ≤ 1,000,000
    1 ≤ score[i] ≤ k
    이익이 발생하지 않는 경우에는 0을 return 해주세요.

2. 계획

  • 주어진 score를 내림차순 정렬한다.
  • m 만큼 인덱스를 이동했을때 값에 m을 곱하고 이 값들을 더한다. 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (k, m, score) => {
  const scores = score.sort((a, b) => b - a);

  let answer = 0;

  for (let i = m - 1; i < scores.length; i += m) {
    answer += (scores[i] * m)
  }

  return answer;
};

test('solution', () => {
  expect(solution(3, 4, [1, 2, 3, 1, 2, 3, 1])).toEqual(8);
  expect(solution(4, 3, [4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2])).toEqual(33);
  expect(solution(4, 4, [4, 4, 3, 3, 3, 2, 2, 2, 1])).toEqual(20);
  expect(solution(9, 2, [7, 7, 6, 5, 2])).toEqual(24);
  expect(solution(7, 2, [7, 7, 5, 3, 3, 3, 1])).toEqual(26);
});