Programmers/Level 0

<22.11.03>프로그래머스 Level 0 문제 풀이 #11

mayberry 2022. 11. 3. 09:48

Programmers Level 0 문제 풀이 #11 : 22-11-03

 

11-1. 종이 자르기

 

문제)

머쓱이는 큰 종이를 1 x 1 크기로 자르려고 합니다. 예를 들어 2 x 2 크기의 종이를 1 x 1 크기로 자르려면 최소 가위질 세 번이 필요합니다.

 

내가 작성한 답안)

function solution(M, N) {
    // 22-11-03
    // M과 N을 곱한 뒤 1을 뺀다.
    return (M*N)-1
}

 

 

11-2. 숨어있는 숫자의 덧셈(2)

 

문제)

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

const solution = (my_string) => {
  // 22-11-03
  // 문자열 내에서 최소 한 개 이상의 자연수로 이루어진 패턴 찾아 string 배열로 반환
  // 이후 각 원소 숫자로 바꾼뒤 reduce 이용하여 합산
  return my_string.match(/\d{1,}/g) !== null ?
    my_string.match(/\d{1,}/g)
             .map(Number)
             .reduce((acc, cur) => acc + cur)
    :
  0
}

 

 

11-3. 소인수분해

 

문제)

소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

내가 작성한 답안)

const solution = (n) => {
  // 22-11-03
  // n을 나눈 수를 담아두는 배열 생성
  const divideSet = [];
  // 매개변수 n을 별도의 변수로 담음
  let target = n;

  // n을 나누는 수(계속 증가해야 함)
  let dNum = 2;

  // target이 1일 경우 while문 종료
  while (target !== 1) {
    // target이 dNum으로 딱 나누어질 때, dNum은 target의 소인수(소수)
    if (!(target % dNum)) {
      divideSet.push(dNum);
      target /= dNum;
    } else {
      dNum++;
    }
  }
  return Array.from(new Set(divideSet));
}