[프로그래머스] Lv.0 주사위의 개수 JavaScript

Janet·2023년 4월 5일
0

Algorithm

목록 보기
113/314

문제 설명

머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • box의 길이는 3입니다.
  • box[0] = 상자의 가로 길이
  • box[1] = 상자의 세로 길이
  • box[2] = 상자의 높이 길이
  • 1 ≤ box의 원소 ≤ 100
  • 1 ≤ n ≤ 50
  • n ≤ box의 원소
  • 주사위는 상자와 평행하게 넣습니다.

입출력 예

boxnresult
[1, 1, 1]11
[10, 8, 6]312

입출력 예 설명

입출력 예 #1

  • 상자의 크기가 가로 1, 세로 1, 높이 1이므로 모서리의 길이가 1인 주사위는 1개 들어갈 수 있습니다.

입출력 예 #2

  • 상자의 크기가 가로 10, 세로 8, 높이 6이므로 모서리의 길이가 3인 주사위는 12개 들어갈 수 있습니다.

문제풀이

💡 문제풀이 과정

  • 상자의 가로 길이 / 주사위 모서리 길이(n) * 세로 길이 / n * 높이 길이 / n를 해줘야 하는데, 주사위 길이로 나눴을 때의 몫만 필요하므로 Math.floor()를 이용한다.
    • Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n);
  • 답안 1번: for( …of) 반복문을 이용하여 answer *= Math.floor(상자의 길이 값 / n); 해줄 수 있다.
  • 답안 2번: reduce() 이용하여 box.reduce((a, b) ⇒ a * Math.floor(b / n) , 1);하여 바로 리턴할 수도 있다.

✅ 답안 #1

function solution1(box, n) {
  let answer = 1;
  for (v of box) answer *= Math.floor(v / n);
  return answer;
}

✅ 답안 #2

function solution(box, n) {
  return box.reduce((acc, cur) => acc * Math.floor(cur / n), 1);
}
profile
😸

0개의 댓글