Programmers/Level 0
<22.11.03>프로그래머스 Level 0 문제 풀이 #11
mayberry
2022. 11. 3. 09:48
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));
}