코딩테스트 11일차
주사위의 개수
머쓱이는 직육면체 모양의 상자를 하나 가지고 있는데 이 상자에 정육면체 모양의 주사위를 최대한 많이 채우고 싶습니다. 상자의 가로, 세로, 높이가 저장되어있는 배열 box와 주사위 모서리의 길이 정수 n이 매개변수로 주어졌을 때, 상자에 들어갈 수 있는 주사위의 최대 개수를 return 하도록 solution 함수를 완성해주세요.
function solution(box, n) {
box.sort((a, b) => a - b);
var length = box[0];
var width = box[1];
var height = box[2];
var maxCount = Math.floor(length / n) * Math.floor(width / n) * Math.floor(height / n);
return maxCount;
}
box 배열을 오름차순으로 정렬하여 상자의 가로, 세로, 높이를 결정합니다. (주어진 순서와는 관계없이 정렬합니다.)
length, width, height 변수에 상자의 각 면의 길이를 저장합니다.
주어진 주사위의 모서리 길이 n으로 계산 가능한 최대 주사위 개수를 구합니다. 이를 위해 가로, 세로, 높이를 각각 n으로 나눈 몫을 계산하고, 이들을 곱하여 최대 주사위 개수를 구합니다.
최대 주사위 개수인 maxCount를 반환합니다.
주의할 점은, 주어진 상자의 가로, 세로, 높이 중 가장 작은 값을 length로 사용한다는 것입니다. 이렇게 하면 주어진 상자의 모든 면을 가로, 세로, 높이로 사용할 수 있기 때문에 최대한 많은 주사위를 채울 수 있습니다.
합성수 찾기
약수의 개수가 세 개 이상인 수를 합성수라고 합니다. 자연수 n이 매개변수로 주어질 때 n이하의 합성수의 개수를 return하도록 solution 함수를 완성해주세요.
function solution(n) {
var answer = 0;
// 2부터 n까지의 숫자에 대해 약수의 개수를 세어 합성수인지 확인합니다.
for (var num = 2; num <= n; num++) {
var divisorCount = 0;
// 1부터 num까지의 숫자로 num을 나누어 약수의 개수를 세어줍니다.
for (var i = 1; i <= num; i++) {
if (num % i === 0) {
divisorCount++;
}
}
// 약수의 개수가 3개 이상인 경우, 합성수로 판단하여 개수를 증가시킵니다.
if (divisorCount >= 3) {
answer++;
}
}
return answer;
}
변수 answer를 0으로 초기화합니다. 이 변수는 n 이하의 합성수 개수를 저장할 것입니다.
2부터 n까지의 숫자에 대해 약수의 개수를 세어 합성수인지 확인합니다.
num 변수를 사용하여 2부터 n까지의 숫자를 반복합니다.
divisorCount 변수를 0으로 초기화합니다. 이 변수는 현재 숫자 num의 약수 개수를 저장할 것입니다.
1부터 num까지의 숫자로 num을 나누어 약수의 개수를 세어줍니다.
i 변수를 사용하여 1부터 num까지의 숫자를 반복합니다.
num을 i로 나누어 나머지가 0인 경우, i는 num의 약수이므로 divisorCount를 증가시킵니다.
divisorCount가 3개 이상인 경우, num은 합성수로 판단하여 answer를 증가시킵니다.
반복이 끝나면 answer를 반환합니다.
최댓값 만들기 (1)
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요.
function solution(numbers) {
var answer = 0;
// 배열을 내림차순으로 정렬합니다.
numbers.sort((a, b) => b - a);
// 가장 큰 두 수를 곱하여 최댓값을 구합니다.
answer = numbers[0] * numbers[1];
return answer;
}
변수 answer를 0으로 초기화합니다. 이 변수는 두 수를 곱한 최댓값을 저장할 것입니다.
주어진 배열 numbers를 내림차순으로 정렬합니다.
가장 큰 두 수를 선택하여 곱하여 answer에 저장합니다. 정렬된 배열에서 첫 번째 원소(numbers[0])와 두 번째 원소(numbers[1])를 곱하여 최댓값을 구합니다.
answer를 반환합니다.
팩토리얼
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
function solution(n) {
var answer = 0;
var i = 1;
while (factorial(i) <= n) {
answer = i;
i++;
}
return answer;
}
function factorial(num) {
if (num === 0 || num === 1) {
return 1;
}
return num * factorial(num - 1);
}
answer 변수를 0으로 초기화합니다. 이 변수는 조건을 만족하는 가장 큰 정수 i를 저장할 것입니다.
i 변수를 1로 초기화합니다. 이 변수는 팩토리얼을 계산하기 위한 정수값을 나타냅니다.
factorial(i)가 주어진 수 n보다 작거나 같을 동안 다음 작업을 반복합니다.
answer를 현재 i로 업데이트합니다. (조건을 만족하는 가장 큰 정수 i를 저장합니다.)
i를 1 증가시킵니다.
반복이 종료되면 answer를 반환합니다.