2 분 소요

주사위의 개수

문제 설명

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


제한사항

  • box의 길이는 3입니다.
  • box[0] = 상자의 가로 길이
  • box[1] = 상자의 세로 길이
  • box[2] = 상자의 높이 길이
  • 1 ≤ box의 원소 ≤ 100
  • 1 ≤ n ≤ 50
  • nbox의 원소
  • 주사위는 상자와 평행하게 넣습니다.

입출력 예

box n result
[1, 1, 1] 1 1
[10, 8, 6] 3 12

문제 풀이

처음에는 박스의 부피를 정육면체 부피로 나눈 몫을 취하려고 했으나, 길이가 정해져있어서 빈틈을 매울 수 없으니 저렇게 구하면 안됩니다.

def solution(box, n):
    num = 1
    for i in box:
        num *= i//n
    return num

그래서 가로, 세로, 높이를 n으로 나눠 들어갈 수 있는 수를 정하고 이를 곱해주었습니다.


합성수 찾기

문제 설명

약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ n ≤ 100

입출력 예

n result
10 5
15 8

문제 풀이

def solution(n):
    num, count = 1, 0   
    while num <= n:
        A = []
        for i in range(1, 1+n):
            if num % i == 0:
                A.append(i)
        num += 1
        if len(A) >= 3:
            count += 1
    return count
def solution(n):
    output = 0
    for i in range(4, n + 1):
        for j in range(2, int(i ** 0.5) + 1):
            if i % j == 0:
                output += 1
                break
    return output

최댓값 만들기(1)

문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 0 ≤ numbers의 원소 ≤ 10,000
  • 2 ≤ numbers의 길이 ≤ 100

입출력 예

numbers result
[1, 2, 3, 4, 5] 20
[0, 31, 24, 10, 1, 9] 744

문제 풀이

def solution(numbers):
    num = 0
    for i, v in enumerate(numbers):
        for j, k in enumerate(numbers):
            if num <= v * k and i != j :
                num = v * k
    return num

def solution(numbers):
    numbers.sort()
    return numbers[-2] * numbers[-1]

팩토리얼

문제 설명

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

  • i! ≤ n

제한사항

  • 0 < n ≤ 3,628,800

입출력 예

n result
3628800 10
7 3

문제 풀이

def solution(n):
    i = 0
    num = 1
    num2 = 0
    while i < n:
        num2 = num
        i += 1
        num *= i
        if num == n:
            return i
        elif num > n:
            if num-n > num2-n:
                return i-1
            elif num-n < n - num2:
                return i
from math import factorial

def solution(n):
    k = 10
    while n < factorial(k):
        k -= 1
    return k

업데이트:

댓글남기기