728x90
1. 문자열 정렬하기 (1)
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
- 정답은
function solution(my_string) {
my_string = my_string.replace(/[a-z]/g, ''); // 영어 소문자를 공백으로 대체
let answer = new Array(my_string.length); // 새로운 배열 answer 생성
for (let i = 0; i < my_string.length; i++) {
answer[i] = parseInt(my_string.charAt(i)); // 새로운 배열에 남은 숫자를 담는다
}
answer.sort(function(a, b) { return a - b; }); // 오름차순 정렬
return answer;
}
- my_string 문자열에서 영어 소문자를 공백으로 대체합니다. 이를 위해 replace 메서드와 정규표현식 [a-z]를 사용하여 소문자를 찾아 공백으로 대체합니다. replaceAll 메서드는 자바에서 사용되는 메서드이므로, 자바스크립트에서는 replace 메서드와 정규표현식 /[a-z]/g를 사용하여 같은 기능을 수행합니다.
- answer라는 길이가 my_string.length()인 새로운 배열을 생성합니다. 자바에서는 배열의 길이를 지정할 때 new int[길이]와 같이 사용하지만, 자바스크립트에서는 new Array(길이)와 같이 사용합니다.
- 반복문을 통해 my_string 문자열에서 한 글자씩 가져와서 answer 배열에 해당 숫자를 저장합니다. charAt(i) 메서드를 사용하여 문자열의 i번째 글자를 가져옵니다. 그리고 parseInt 함수를 사용하여 해당 글자를 숫자로 변환하여 answer 배열에 저장합니다.
- answer 배열을 오름차순으로 정렬합니다. 이를 위해 sort 메서드를 사용하고, 정렬 순서를 나타내는 비교 함수 function(a, b) { return a - b; }를 제공합니다. 이 함수는 a와 b를 비교하여 결과에 따라 정렬 순서를 결정합니다. 숫자의 경우, a - b를 반환하면 오름차순으로 정렬됩니다.
- 최종적으로 정렬된 answer 배열을 반환합니다.
2. 숨어있는 숫자의 덧셈 (1)
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
- 정답은
function solution(my_string) {
return Array.from(my_string.replace(/[^0-9]/g, ''))
.map(c => parseInt(c))
.reduce((a, b) => a + b, 0);
}
- my_string에서 숫자를 제외한 모든 문자를 빈 문자열로 대체합니다. 이를 위해 정규표현식 [^0-9]를 사용하고, replace 메서드를 활용하여 해당 정규표현식과 일치하는 문자를 빈 문자열로 대체합니다. 자바스크립트에서는 정규표현식을 생성할 때 /패턴/ 형식을 사용하며, g 플래그는 전역 검색을 의미합니다.
- 대체된 문자열을 Array.from 메서드를 사용하여 문자열을 배열로 변환합니다. 그리고 map 메서드를 사용하여 각 문자를 정수로 변환합니다. parseInt 함수를 활용하여 문자를 정수로 변환합니다.
- 변환된 배열의 각 요소들을 합산하기 위해 reduce 메서드를 사용합니다. 두 개의 숫자를 더하는 콜백 함수 (a, b) => a + b를 제공하고, 초기값으로 0을 설정합니다.
- 최종적으로 합산된 결과를 반환합니다.
3. 소인수분해
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
- 정답은
function solution(n) {
const smallNumber = [];
let idx = 2;
while (n !== 1) {
if (n % idx === 0) {
smallNumber.push(idx);
n /= idx;
idx = 2;
} else {
idx += 1;
}
}
return Array.from(new Set(smallNumber));
}
- smallNumber라는 빈 배열을 선언합니다. 이 배열은 소인수를 담을 배열입니다.
- idx 변수를 2로 초기화합니다. 이 변수는 n을 소인수로 나눌 수 있는지 확인하는 역할을 합니다.
- n이 1이 아닌 동안 반복합니다.
- 만약 n이 idx로 나누어 떨어진다면, idx는 n의 소인수입니다. 따라서 smallNumber 배열에 idx를 추가합니다.
- n을 idx로 나눕니다.
- idx를 다시 2로 초기화하여 다음 소인수를 찾을 준비를 합니다.
- 그렇지 않은 경우, idx를 1 증가시킵니다. 이렇게 하면 다음 가능한 소인수를 찾아냅니다.
- n이 1이 될 때까지 위의 과정을 반복합니다.
- 마지막으로, smallNumber 배열에서 중복된 값들을 제거하기 위해 Array.from(new Set(smallNumber))를 사용하여 중복을 제거한 배열을 반환합니다.