
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120845
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 문제 설명
머쓱이는 직육면체 모양의 상자에 정육면체 모양의 주사위를 최대한 많이 넣고 싶습니다. 상자의 가로, 세로, 높이가 저장된 배열 box와 주사위의 한 변의 길이 n이 주어질 때, 최대로 들어갈 수 있는 주사위 개수를 구하는 프로그램을 작성하세요.
🔹 제한사항
- 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
📌 상자 크기: [10, 8, 6] (가로 10, 세로 8, 높이 6)
📌 주사위 크기: 3 (한 변의 길이가 3)
👉 각 방향에서 주사위가 몇 개 들어갈까요?
- 가로(10): 10 ÷ 3 = 3개
- 세로(8): 8 ÷ 3 = 2개
- 높이(6): 6 ÷ 3 = 2개
✨ 전체 주사위 개수 = 3 × 2 × 2 = 12개 🎲🎲🎲
🔹 예제 2
📌 상자 크기: [1, 1, 1] (가로 1, 세로 1, 높이 1)
📌 주사위 크기: 1
👉 각 방향에서 주사위가 몇 개 들어갈까요?
- 가로(1): 1 ÷ 1 = 1개
- 세로(1): 1 ÷ 1 = 1개
- 높이(1): 1 ÷ 1 = 1개
✨ 전체 주사위 개수 = 1 × 1 × 1 = 1개 🎲
✅ 왜 곱하기로 계산할까?
주사위를 넣는 개수를 곱하기로 계산하는 이유는 부피(공간)를 채우는 방식 때문입니다.
🔹 1차원(선형) 예제
만약 가로 길이가 10이고, 주사위 크기가 3이라면:
👉 10 ÷ 3 = 3개 (나머지는 버림)
즉, 한 줄에 3개의 주사위를 넣을 수 있습니다.
🔹 2차원(평면) 예제
📌 가로 = 10, 세로 = 8, 주사위 크기 = 3인 경우
👉 가로 방향: 10 ÷ 3 = 3개
👉 세로 방향: 8 ÷ 3 = 2개
💡 한 층(바닥)에 총 3 × 2 = 6개의 주사위를 놓을 수 있습니다.
🔹 3차원(부피) 예제
📌 가로 = 10, 세로 = 8, 높이 = 6, 주사위 크기 = 3인 경우
👉 가로 방향: 10 ÷ 3 = 3개
👉 세로 방향: 8 ÷ 3 = 2개
👉 높이 방향: 6 ÷ 3 = 2개
💡 전체 공간에 들어가는 주사위 개수 = 3 × 2 × 2 = 12개 🎲
즉, 가로 × 세로 × 높이 방향별 주사위 개수를 곱하면 전체 개수가 나옵니다! ✅
✅ 해결 방법
1️⃣ 각 방향별 주사위 개수를 계산 후 곱하기 🚀
def solution(box, n):
return (box[0] // n) * (box[1] // n) * (box[2] // n)
🔹 쉽게 설명하면?
- 각 방향(가로, 세로, 높이)에서 주사위가 몇 개 들어갈 수 있는지 계산합니다.
- box[0] // n: 가로 방향에서 들어갈 수 있는 주사위 개수
- box[1] // n: 세로 방향에서 들어갈 수 있는 주사위 개수
- box[2] // n: 높이 방향에서 들어갈 수 있는 주사위 개수
- 이 세 개를 곱하면 상자 전체에 들어갈 수 있는 주사위의 최대 개수를 구할 수 있습니다.
✅ 시간 복잡도: O(1) (간단한 나눗셈과 곱셈 연산만 수행)
📌 실행 예제
print(solution([1, 1, 1], 1)) # 1
print(solution([10, 8, 6], 3)) # 12
✅ 결론: 각 방향별로 최대 개수를 구한 후 곱하는 방식이 가장 간단하고 빠름! 🚀
'IT > CodingTest' 카테고리의 다른 글
[programmers] 'OX퀴즈' 문제를 가장 간단하게 푸는 방법 (0) | 2025.03.27 |
---|---|
[programmers] '영어가 싫어요' 문제 해설 및 정답코드 (0) | 2025.03.25 |
[programmers] '삼각형의 완성조건(2)' 문제 해설 및 정답코드 (0) | 2025.03.25 |
[programmers] '공 던지기' 문제 해설 및 정답코드 (0) | 2025.03.20 |
[programmers] '2차원으로 만들기' 문제해설 (0) | 2025.03.18 |
[programmers] '외계행성의 나이' 문제 간단하게 풀기 (1) | 2025.02.27 |
[programmers] '가위 바위 보' 문제를 푸는 여러 가지 방법 (0) | 2025.02.25 |
[programmers] '최빈값 구하기' 문제 쉽게 풀어보기 (0) | 2025.02.22 |
댓글