🔖 문제 설명
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box
와 주사위 모서리의 길이 정수 n
이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
⛔ 제한사항
box
의 길이는 3입니다.box[0]
= 상자의 가로 길이box[1]
= 상자의 세로 길이box[2]
= 상자의 높이 길이- 1 ≤
box
의 원소 ≤ 100 - 1 ≤
n
≤ 50 n
≤box
의 원소- 주사위는 상자와 평행하게 넣습니다.
📋 입출력 예시
box | n | result |
[1, 1, 1] | 1 | 1 |
[10, 8, 6] | 3 | 12 |
🔖 입출력 예 설명
입출력 예 #1
- 상자의 크기가 가로 1, 세로 1, 높이 1이므로 모서리의 길이가 1인 주사위는 1개 들어갈 수 있습니다.
입출력 예 #2
- 상자의 크기가 가로 10, 세로 8, 높이 6이므로 모서리의 길이가 3인 주사위는 12개 들어갈 수 있습니다.
🧾 기본 제공 코드
function solution(box, n) {
var answer = 0;
return answer;
}
🗳️ 직접 풀이한 코드
function solution(box, n) {
const [ width, length, height ] = box;
return Math.floor(width / n) * Math.floor(length / n) * Math.floor(height / n);
}
처음 문제를 풀이하려 할 때, 부피로 계산하면 되겠지 라는 생각이 들어 직육면체 상자의 부피에 정육면체 주사위의 부피를 나누는 방식으로 문제에 접근했다.
하지만 그렇게 나눠서 풀이하려고 하니 문제에서 요구하는 답과는 다른 답이 도출되어 틀리다고 나왔다.
앞선 풀이 과정은 이랬다.
부피를 구하는 공식인 가로
X 세로
X 높이
를 이용해 상자와 주사위의 부피를 구했다.
입출력 예 2번의 예시를 들어 대입해보면
상자의 부피는 10 X 8 X 6 = 480이고,
주사위는 모서리가 3인 정육면체이기 때문에 3 X 3 X 3 = 27 이라는 부피값이 구해진다.
이걸 480 / 27 로 해보면 17.77777777777778 이라는 값이 나오는데, 문제에서 도출되어야 하는 값은 12이기 때문에 올바른 풀이 과정이 아닌게 된다.
이후 왜 부피를 활용한 방식으로는 답이 도출되지 않을까를 생각했고, 1차원적인 방식으로 차근차근 하나씩 가로, 세로, 높이에 주사위의 모서리값을 대입해보며 계산해보기로 했다.
먼저, 그대로 입출력 예 2번의 값을 활용한다고 하고
상자의 가로값이 10인 경우 주사위의 모서리값인 3은 그 너비 안에 총 3개의 주사위가 들어갈 수 있다.
이걸 풀이 과정으로 바꿔보면 10 / 3 이고, 값은 3.3333333333333335이며 불필요한 소수점 자리를 버린다면 3이라는 정수를 구할 수 있다.
마찬가지로 상자의 세로값인 8에는 2개의 주사위가 들어갈 수 있고,
마지막으로 상자의 높이값인 6에는 2개의 주사위가 들어갈 수 있다.
이렇게 발견한 규칙들을 코드로 바꿔보면 Math.floor(box[idx] / n)
이 되고,
위 직관적으로 구해진 주사위 값들을 모두 곱하게 되면 3 X 2 X 2를 하여 12라는 값을 구할 수 있다.
🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️
'프로그래머스 > 코딩문제' 카테고리의 다른 글
[프로그래머스] Lv.0 세균 증식 (0) | 2024.02.22 |
---|---|
[프로그래머스] Lv.0 피자 나눠 먹기 (3) (1) | 2024.02.19 |
[프로그래머스] Lv.0 배열 만들기 5 (1) | 2024.01.30 |
[프로그래머스] Lv.0 문자열 여러 번 뒤집기 (0) | 2024.01.19 |
[프로그래머스/JS] Lv.1 비밀지도 (0) | 2023.11.16 |