programmers

프로그래머스 문제풀이 모음

# Level 0. 직사각형 넓이 구하기

직사각형 넓이 구하기

문제 설명

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(dots) {
  let width = 0;
  let height = 0;

  for (let i = 1; i < 4; i++) {
    if (dots[i][0] === dots[0][0]) {
      height = Math.abs(dots[i][1] - dots[0][1]);
      continue;
    }

    if (dots[i][1] === dots[0][1]) {
      width = Math.abs(dots[i][0] - dots[0][0]);
    }
  }

  return width * height;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function solution(dots) {
  let width = 0;
  let height = 0;

  for (let i = 1; i < 4; i++) {
    if (dots[i][0] === dots[0][0]) {
      height = Math.abs(dots[i][1] - dots[0][1]);
      continue;
    }

    if (dots[i][1] === dots[0][1]) {
      width = Math.abs(dots[i][0] - dots[0][0]);
    }
  }

  return width * height;
}

리팩토링

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(dots) {
  const [benchmarkX, benchmarkY] = dots[0];
  let width = 0;
  let height = 0;

  dots.forEach(([x, y], index) => {
    if (index === 0) return;
    if (!height && x === benchmarkX) height = Math.abs(benchmarkY - y);
    if (!width && y === benchmarkY) width = Math.abs(benchmarkX - x);
  });

  return width * height;
}

# Level 0. 다항식 더하기

다항식 더하기

문제 설명

한 개 이상의 항의 합으로 이루어진 식을 다항식이라고 합니다. 다항식을 계산할 때는 동류항끼리 계산해 정리합니다. 덧셈으로 이루어진 다항식 polynomial이 매개변수로 주어질 때, 동류항끼리 더한 결괏값을 문자열로 return 하도록 solution 함수를 완성해보세요. 같은 식이라면 가장 짧은 수식을 return 합니다.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(polynomial) {
  const answer = [0, 0];
  const splitted = polynomial.split(" + ");

  if (splitted.length === 1) return polynomial;

  splitted.forEach((term) => {
    if (term[term.length - 1] !== "x") {
      answer[1] += term * 1;
      return;
    }

    answer[0] += term === "x" ? 1 : term.slice(0, term.length - 1) * 1;
  });

  if (answer[0] === 1) answer[0] = "";
  answer[0] += "x";
  if (answer[0] === "0x") answer.shift();
  if (answer[1] === 0) answer.pop();

  return answer.join(" + ");
}

리팩토링

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
27
28
29
30
31
32
33
34
35
36
const filterPolynomial = (polynomialStr) => {
  const validTerm = new RegExp("[0-9]*x|[0-9]+", "g");
  return polynomialStr.match(validTerm);
};

const getPolynomialResult = (polynomialArr) => {
  const result = [0, 0];
  polynomialArr.forEach((term) => {
    if (term[term.length - 1] !== "x") {
      result[1] += parseInt(term);
      return;
    }

    result[0] += term === "x" ? 1 : parseInt(term);
  });

  return result;
};

const formatPolynomial = (xNumber, constant) => {
  if (!xNumber) return [constant];

  const result = [];
  xNumber === 1 ? result.push("x") : result.push(`${xNumber}x`);
  if (constant) result.push(constant);

  return result;
};

function solution(polynomial) {
  const filtered = filterPolynomial(polynomial);
  const [x, constant] = getPolynomialResult(filtered);
  const answer = formatPolynomial(x, constant);

  return answer.join(" + ");
}

두번째 리팩토링

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(polynomial) {
  const answer = [0, 0];
  const splitted = polynomial.split(" + ");

  if (splitted.length === 1) return polynomial;

  splitted.forEach((term) => {
    let index = 0;
    if (term[term.length - 1] !== "x") index = 1;

    answer[index] += term === "x" ? 1 : parseInt(term);
  });

  if (!answer[0]) return `${answer[1]}`;
  if (!answer[1]) answer.pop();
  answer[0] === 1 ? (answer[0] = "x") : (answer[0] += "x");

  return answer.join(" + ");
}

# Level 0. 7의 개수

7의 개수

문제 설명

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
function solution(array) {
  let answer = 0;
  array.forEach((num) => {
    while (num) {
      if (num % 10 === 7) answer++;
      num = Math.floor(num / 10);
    }
  });
  return answer;
}

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

최댓값 만들기 (2)

문제 설명

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

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
function solution(numbers) {
  let max = -Infinity;
  for (let i = 0; i < numbers.length; i++) {
    for (let j = i + 1; j < numbers.length; j++) {
      if (max < numbers[i] * numbers[j]) max = numbers[i] * numbers[j];
    }
  }
  return max;
}

# Level 0. 잘라서 배열로 저장하기

잘라서 배열로 저장하기

문제 설명

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
function solution(my_str, n) {
  const answer = [];
  let index = 0;
  while (index < my_str.length) {
    answer.push(my_str.slice(index, index + n));
    index += n;
  }
  return answer;
}

# Level 0. 캐릭터의 좌표

캐릭터의 좌표

문제 설명

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다. 예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다. 캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function solution(keyinput, board) {
  const character = [0, 0];
  const halfWidth = (board[0] - 1) / 2;
  const halfHeigth = (board[1] - 1) / 2;
  keyinput.forEach((key) => {
    switch (key) {
      case "left":
        if (character[0] > -halfWidth) character[0]--;
        break;
      case "right":
        if (character[0] < halfWidth) character[0]++;
        break;
      case "down":
        if (character[1] > -halfHeigth) character[1]--;
        break;
      case "up":
        if (character[1] < halfHeigth) character[1]++;
        break;
    }
  });
  return character;
}

# Level 0. 문자열안에 문자열

문자열안에 문자열

문제 설명

문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
function solution(str1, str2) {
  const strRegExp = new RegExp(str2);
  return strRegExp.test(str1) ? 1 : 2;
}

# Level 0. 문자열 정렬하기 (2)

문자열 정렬하기 (2)

문제 설명

영어 대소문자로 이루어진 문자열 my_string이 매개변수로 주어질 때, my_string을 모두 소문자로 바꾸고 알파벳 순서대로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항

문제풀이

1
2
3
function solution(my_string) {
  return my_string.toLowerCase().split("").sort().join("");
}

# Level 0. OX퀴즈

OX퀴즈

문제 설명

덧셈, 뺄셈 수식들이 ‘X [연산자] Y = Z’ 형태로 들어있는 문자열 배열 quiz가 매개변수로 주어집니다. 수식이 옳다면 “O”를 틀리다면 “X”를 순서대로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제풀이

1
2
3
4
5
6
7
8
9
10
11
const getExpressionResult = (expression) => {
  const [X, operator, Y, _, Z] = expression.split(" ");
  let result = X * 1;
  result += operator === "+" ? Y * 1 : Y * -1;
  return result === Z * 1 ? "O" : "X";
};

const solution = (quiz) => {
  const answer = quiz.map((expression) => getExpressionResult(expression));
  return answer;
};

# Level 0. n의 배수 고르기

n의 배수 고르기

문제 설명

정수 n과 정수 배열 numlist가 매개변수로 주어질 때, numlist에서 n의 배수가 아닌 수들을 제거한 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
function solution(n, numlist) {
  return numlist.filter((num) => !(num % n));
}

두번째 문제 풀이

1
2
3
4
5
6
function solution(n, numlist) {
  return numlist.filter((num) => {
    if (num % n === 0) return true;
    return false;
  });
}

# Level 0. 숫자 찾기

숫자 찾기

문제 설명

정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

제한사항

첫번째 문제 풀이

1
2
3
4
5
6
function solution(num, k) {
  const numArr = num.toString().split("");
  const strK = k.toString();
  if (numArr.includes(strK)) return numArr.indexOf(strK) + 1;
  return -1;
}

두번째 문제 풀이

1
2
3
4
5
6
7
8
9
10
11
function solution(num, k) {
  let index = 0;
  const length = num.toString().length;
  let answer = -1;
  while (num) {
    if (num % 10 === k) answer = length - index;
    num = Math.floor(num / 10);
    index++;
  }
  return answer;
}

# Level 0. 세균 증식

세균 증식

문제 설명

어떤 세균은 1시간에 두배만큼 증식한다고 합니다. 처음 세균의 마리수 n과 경과한 시간 t가 매개변수로 주어질 때 t시간 후 세균의 수를 return하도록 solution 함수를 완성해주세요.

제한사항

문제풀이

1
2
3
function solution(n, t) {
  return n * Math.pow(2, t);
}

# Level 0. 한 번만 등장한 문자

한 번만 등장한 문자

문제 설명

문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
function solution(s) {
  let answer = "";
  const countArray = new Array(32).fill(0);
  for (let i = 0; i < s.length; i++) {
    countArray[s.charCodeAt(i) - 97]++;
  }
  countArray.forEach((count, index) => {
    if (count === 1) answer += String.fromCharCode(index + 97);
  });
  return answer;
}

# Level 0. 가장 큰 수 찾기

가장 큰 수 찾기

문제 설명

정수 배열 array가 매개변수로 주어질 때, 가장 큰 수와 그 수의 인덱스를 담은 배열을 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
4
function solution(array) {
  const max = Math.max(...array);
  return [max, array.indexOf(max)];
}

# Level 0. 약수 구하기

약수 구하기

문제 설명

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(n) {
  const answer = [];

  for (let i = 1; i <= Math.sqrt(n); i++) {
    if (n % i === 0) {
      answer.push(i);
      if (n / i === i) continue;
      answer.push(n / i);
    }
  }

  return answer.sort((a, b) => a - b);
}

# Level 0. 문자열 계산하기

문자열 계산하기

문제 설명

my_string은 “3 + 5”처럼 문자열로 된 수식입니다. 문자열 my_string이 매개변수로 주어질 때, 수식을 계산한 값을 return 하는 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
function solution(my_string) {
  const splitted = my_string.split(" ");
  let answer = parseInt(splitted[0]);
  for (let i = 1; i < splitted.length; i += 2) {
    if (splitted[i] === "+") {
      answer += parseInt(splitted[i + 1]);
    } else if (splitted[i] === "-") {
      answer -= parseInt(splitted[i + 1]);
    }
  }
  return answer;
}

# Level 0. 배열의 유사도

배열의 유사도

문제 설명

두 배열이 얼마나 유사한지 확인해보려고 합니다. 문자열 배열 s1과 s2가 주어질 때 같은 원소의 개수를 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
function solution(s1, s2) {
  const similarity = s1.filter((char) => s2.includes(char)).length;
  return similarity;
}

# Level 0. 영어가 싫어요

영어가 싫어요

문제 설명

영어가 싫은 머쓱이는 영어로 표기되어있는 숫자를 수로 바꾸려고 합니다. 문자열 numbers가 매개변수로 주어질 때, numbers를 정수로 바꿔 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
27
const numberMap = {
  zero: "0",
  one: "1",
  two: "2",
  three: "3",
  four: "4",
  five: "5",
  six: "6",
  seven: "7",
  eight: "8",
  nine: "9",
};

function solution(numbers) {
  let answer = "";
  let searchWord = "";

  for (let i = 0; i < numbers.length; i++) {
    searchWord += numbers[i];
    if (numberMap[searchWord]) {
      answer += numberMap[searchWord];
      searchWord = "";
    }
  }

  return answer * 1;
}

# Level 0. 인덱스 바꾸기

인덱스 바꾸기

문제 설명

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
function solution(my_string, num1, num2) {
  my_string = my_string.split("");
  let temp = "";
  temp = my_string[num1];
  my_string[num1] = my_string[num2];
  my_string[num2] = temp;
  return my_string.join("");
}

더 나은 풀이

1
2
3
4
5
function solution(my_string, num1, num2) {
  my_string = my_string.split("");
  [my_string[num1], my_string[num2]] = [my_string[num2], my_string[num1]];
  return my_string.join("");
}

# Level 0. 대문자와 소문자

대문자와 소문자

문제 설명

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
function solution(my_string) {
  let answer = "";
  for (let i = 0; i < my_string.length; i++) {
    const asciiNum = my_string[i].charCodeAt();
    if (asciiNum <= 90) {
      answer += String.fromCharCode(asciiNum + 32);
    } else {
      answer += String.fromCharCode(asciiNum - 32);
    }
  }
  return answer;
}

# Level 0. 배열 원소의 길이

배열 원소의 길이

문제 설명

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
function solution(strlist) {
  return strlist.map((str) => str.length);
}

# Level 0. 삼각형의 완성 조건 (1)

삼각형의 완성조건 (1)

문제 설명

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.

가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다. 삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
function solution(sides) {
  const max = Math.max(...sides);
  const maxIndex = sides.indexOf(max);
  const answer =
    sides.reduce((acc, curr, index) => {
      if (index === maxIndex) return acc;
      return acc + curr;
    }) > max
      ? 1
      : 2;
  return answer;
}

# Level 0. 중복된 문자 제거

중복된 문자 제거

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
function solution(my_string) {
  return [...new Set(my_string.split(""))].join("");
}

# Level 0. 암호 해독

암호 해독

문제 설명

군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.

암호화된 문자열 cipher를 주고받습니다. 그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다. 문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
function solution(cipher, code) {
  let answer = "";
  for (let i = 0; i < cipher.length; i++) {
    if ((i + 1) % code === 0) answer += cipher[i];
  }
  return answer;
}

# Level 0. 가까운 수

가까운 수

문제 설명

정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(array, n) {
  let closest;
  let gap = Infinity;
  array.forEach((num) => {
    const currGap = Math.abs(num - n);
    if (currGap < gap) {
      closest = num;
      gap = currGap;
    } else if (currGap === gap && num < closest) {
      closest = num;
    }
  });
  return closest;
}

# Level 0. 369게임

369게임

문제 설명

머쓱이는 친구들과 369게임을 하고 있습니다. 369게임은 1부터 숫자를 하나씩 대며 3, 6, 9가 들어가는 숫자는 숫자 대신 3, 6, 9의 개수만큼 박수를 치는 게임입니다. 머쓱이가 말해야하는 숫자 order가 매개변수로 주어질 때, 머쓱이가 쳐야할 박수 횟수를 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
function solution(order) {
  return order.toString().match(/3|6|9/g)?.length || 0;
}

# Level 0. 문자열 정렬하기 (1)

문자열 정렬하기 (1)

문제 설명

문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.

제한사항

문제 풀이

1
2
3
4
function solution(my_string) {
  const numbers = my_string.match(/[0-9]/g).map((num) => num * 1);
  return numbers.sort((a, b) => a - b);
}

# Level 0. 숨어있는 숫자의 덧셈 (1)

숨어있는 숫자의 덧셈 (1)

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
function solution(my_string) {
  const numbers = my_string.match(/[0-9]/g).map((num) => num * 1);
  const sum = numbers.reduce((acc, curr) => acc + curr);
  return sum;
}

# Level 0. 소인수분해

소인수분해

문제 설명

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 _ 2 _ 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 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
27
28
29
30
31
32
const checkIsPrime = (number) => {
  for (let j = 2; j <= Math.floor(Math.sqrt(number)); j++) {
    if (number % j === 0 && number !== j) return false;
  }

  return true;
};

const getPrimesUnderNumber = (limitNumber) => {
  const primes = [2];

  for (let i = 3; i <= limitNumber; i++) {
    checkIsPrime(i) && primes.push(i);
  }

  return primes;
};

const solution = (n) => {
  const answer = [];
  const primes = getPrimesUnderNumber(n);

  let index = 0;
  while (primes[index] <= n) {
    if (n % primes[index] === 0) {
      answer.push(primes[index]);
    }
    index++;
  }

  return answer;
};

# Level 0. 모음 제거

모음 제거

문제 설명

영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다. 문자열 my_string이 매개변수로 주어질 때 모음을 제거한 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
function solution(my_string) {
  const vowel = ["a", "e", "i", "o", "u"];
  return my_string
    .split("")
    .filter((char) => !vowel.includes(char))
    .join("");
}

# Level 0. 컨트롤 제트

컨트롤 제트

문제 설명

숫자와 “Z”가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

제한사항

문제 풀이

1
2
3
4
5
6
7
8
9
10
11
function solution(s) {
  let answer = 0;
  s = s.split(" ");
  s.forEach((num, index) => {
    if (index === 0) return;
    if ((num === "Z") | (s[index - 1] === "Z")) return;
    answer += s[index - 1] * 1;
  });
  answer += s[s.length - 1] !== "Z" ? s[s.length - 1] * 1 : 0;
  return answer;
}

# Level 0. 공 던지기

공 던지기

문제 설명

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

제한사항

풀이

1
2
3
4
5
const solution = (numbers, k) => {
  const passedLength = (k - 1) * 2;
  const index = passedLength % numbers.length;
  return numbers[index];
};

# Level 0. 합성수 찾기

합성수 찾기

문제 설명

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

제한사항

첫번째 풀이

1
2
3
4
5
6
7
8
9
10
11
12
const solution = (n) => {
  let answer = 0;
  for (let i = 4; i <= n; i++) {
    for (let j = 2; j <= Math.floor(Math.sqrt(i)); j++) {
      if (i % j === 0) {
        answer++;
        break;
      }
    }
  }
  return answer;
};

두번째 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const solution = (n) => {
  const screener = new Array(n + 1).fill(false);
  for (let i = 2; i <= Math.floor(Math.sqrt(n)); i++) {
    if (screener[i]) continue;

    let multiplier = 2;
    while (i * multiplier <= n) {
      screener[i * multiplier] = true;
      multiplier++;
    }
  }

  return screener.filter((result) => result).length;
};

# Level 0. 문자열 나누기

문자열 나누기

문제 설명

문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다.

문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 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
27
28
function solution(s) {
  let answer = 0;
  let currChar = "";
  let sameCount = 0;
  let diffCount = 0;
  let isSplitted = true;
  s.split("").forEach((char) => {
    if (isSplitted) {
      answer++;
      currChar = char;
      sameCount = 1;
      diffCount = 0;
      isSplitted = false;
      return;
    }

    if (currChar === char) {
      sameCount++;
    } else {
      diffCount++;
    }

    if (sameCount === diffCount) {
      isSplitted = true;
    }
  });
  return answer;
}

# 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;
}

Check out other tags: