본문 바로가기
코딩테스트 입문/Python

[프로그래머스/programmers] 주사위의 개수

by Peter.JH 2023. 7. 13.
728x90

문제:

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

 

 

입력:

상자의 가로, 세로, 높이가 저장되어있는 배열 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

 

solution.py:

 

def solution(box, n):
    return (box[0]//n)*(box[1]//n)*(box[2]//n)

 

풀이설명: 

상자의 가로, 세로, 높이마다 상자에 들어갈 정육면체 모양의 주사위를 나누어 들어갈 개수를 구한 후 곱한다.

 

 

  • box[0],box[1].... 이런식으로 접근하는 방법보다 좋은 방법이 있었다.
  • lambda와 map을 활용하면 더 깔끔하게 할 수 있다. 
  • math.prod(iterable, *, start=1)입력 이터러블(iterable)에 있는 모든 요소의 곱을 계산합니다. 곱의 기본 start 값은 1입니다.

#참조: https://docs.python.org/3/library/math.html

 

 

math — Mathematical functions

This module provides access to the mathematical functions defined by the C standard. These functions cannot be used with complex numbers; use the functions of the same name from the cmath module if...

docs.python.org

lambda 매개변수 : 표현식
map(함수, 리스트)
import math

def solution(box, n):
    return math.prod(map(lambda v: v//n, box))

 

 

 

728x90