[Programmers] 주사위의 개수

그래도 해야지·2023년 4월 19일
0

Programmers

목록 보기
17/40
post-thumbnail

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

🤔 해설

for문을 돌리고 가로, 세로, 높이 / n을 해서 각각의 몫을 구하고 3개의 값을 곱하면 주사위의 개수를 구할 수 있다.

for(let i = 0; i < box.length; i++) {
        answer.push(Math.floor(box[i] / n))
    }

근데 reduce함수를 알아야 했음!

reduce

array.reduce((a,b) => a + b)

=> 이건 array 내의 요소들을 모두 더하는 것

reducer
이전 상태와 동작을 받아 새 상태를 리턴하는 순수 함수이다. 순수 함수란 동일한 인자가 들어오면 항상 같은 값이 나와야하고 return 값으로만 소통하고 데이터베이스 호출이나 HTTP 호출 등 외부의 데이터 구조를 변형하는 호출을 허용하지 않는 함수이다.

reduce 함수에서의 초기값

  • array.reduce((a,b) => a + b, 1)
const array = [1, 2, 3]
array.reduce((a,b) => a + b, 1)

여기서 1은 초기값!
그러니까 위의 이 함수는 array내의 요소들을 모두 더하는 함수인데 처음 더할 때
1+1+2+3이 되는 것이다.

  • array.reduce((a,b) => a + b)
array.reduce((a,b) => a + b)

0+1+2+3으로 더해야하기때문에 덧셈을 할 때는 초기값을 없애야한다.

✅ 답

function solution(box, n) {
    const answer = []
    for(let i = 0; i < box.length; i++) {
        answer.push(Math.floor(box[i] / n))
    }
    return answer.reduce((acc, cur) => acc * cur, 1)
}

0개의 댓글