본문 바로가기
IT/CodingTest

[programmers] '주사위의 개수' 문제해설

by Echinacea 2025. 3. 17.
반응형

문제 출처

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)

 

🔹 쉽게 설명하면?

  1. 각 방향(가로, 세로, 높이)에서 주사위가 몇 개 들어갈 수 있는지 계산합니다.
    • box[0] // n: 가로 방향에서 들어갈 수 있는 주사위 개수
    • box[1] // n: 세로 방향에서 들어갈 수 있는 주사위 개수
    • box[2] // n: 높이 방향에서 들어갈 수 있는 주사위 개수
  2. 이 세 개를 곱하면 상자 전체에 들어갈 수 있는 주사위의 최대 개수를 구할 수 있습니다.

시간 복잡도: O(1) (간단한 나눗셈과 곱셈 연산만 수행)


 

 

📌 실행 예제

print(solution([1, 1, 1], 1))  # 1
print(solution([10, 8, 6], 3))  # 12

결론: 각 방향별로 최대 개수를 구한 후 곱하는 방식이 가장 간단하고 빠름! 🚀

 

 

반응형

댓글