# Level 0. 주사위의 개수

주사위의 개수

문제 설명

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

제한사항

풀이

1
2
3
4
5
const solution = (box, n) => {
  return (
    Math.floor(box[0] / n) * Math.floor(box[1] / n) * Math.floor(box[2] / n)
  );
};

# Level 0. 최댓값 만들기 (1)

최댓값 만들기 (1)

문제 설명

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

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
const solution = (numbers) => {
  let firstMax = 0;
  let secondMax = 0;
  numbers.forEach((number) => {
    if (numbers[i] > firstMax) {
      secondMax = firstMax;
      firstMax = numbers[i];
    } else if (numbers[i] > secondMax) {
      secondMax = numbers[i];
    }
  });
  return firstMax * secondMax;
};

# Level 0. 팩토리얼

팩토리얼

문제 설명

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

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const solution = (n) => {
  const memo = new Array(10).fill(0);
  memo[0] = 1;
  memo[1] = 1;
  memo[2] = 2;

  const _memoFactorial = (number) => {
    if (memo[number]) return memo[number];

    memo[number] = number * _memoFactorial(number - 1);
    return memo[number];
  };
  _memoFactorial(10);

  let maxFactorial = 0;
  memo.some((num, index) => {
    if (num <= n) {
      maxFactorial = index;
      return false;
    }

    return true;
  });

  return maxFactorial;
};

# Level 0. 가장 가까운 같은 글자

가장 가까운 같은 글자

문제 설명

문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다. 예를 들어, s=”banana”라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.

문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function solution(s) {
  const answer = [];
  const charMap = {};
  s.split("").forEach((char, index) => {
    if (charMap[char] === undefined) {
      answer[index] = -1;
      charMap[char] = index;
      return;
    }

    answer[index] = index - charMap[char];
    charMap[char] = index;
  });
  return answer;
}

백준 문제 풀이 : 구슬을 나누는 경우의 수

1
2
3
4
5
6
7
8
9
10
11
12
function solution(balls, share) {
  const memo = new Array(balls + 1);
  memo[0] = BigInt(1);
  memo[1] = BigInt(1);
  memo[2] = BigInt(2);

  for (let i = 3; i < memo.length; i++) {
    memo[i] = BigInt(i) * memo[i - 1];
  }

  return memo[balls] / (memo[balls - share] * memo[share]);
}