# Level 0. 가까운 수
가까운 수
문제 설명
정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 1 ≤ array의 원소 ≤ 100
- 1 ≤ n ≤ 100
- 가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다.
문제 풀이
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;
}
|
- 요구사항대로 풀이함.
- 3, 6, 9가 없을 경우를 사용하여 옵셔널 체이닝 사용함.
# Level 0. 문자열 정렬하기 (1)
문자열 정렬하기 (1)
문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
문제 풀이
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);
}
|
- 요구사항대로 구현함.
- 문자열 중 숫자 탐색을 여러가지 방법으로 구현할 수 있었으나, 제한사항이 적기 때문에 구현이 가장 쉽고 용이한 정규표현식을 이용하였음.
- 정렬도 마찬가지로 내장 sort 메서드를 사용함.
# Level 0. 숨어있는 숫자의 덧셈 (1)
숨어있는 숫자의 덧셈 (1)
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
문제 풀이
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;
};
|
- 소수를 구한 뒤, 소수를 순회하며 n이 소수로 나눠지는지 확인하는 방법이다.