문자열 정렬하기 (1)
문제 설명
문자열 my_string이 매개변수로 주어질 때, my_string 안에 있는 숫자만 골라 오름차순 정렬한 리스트를 return 하도록 solution 함수를 작성해보세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 100
- my_string에는 숫자가 한 개 이상 포함되어 있습니다.
- my_string은 영어 소문자 또는 0부터 9까지의 숫자로 이루어져 있습니다.
풀이
const solution = (my_string) =>
my_string.replace(/[^0-9]/g, "")
.split("")
.map(el => +el)
.sort((a, b) => a - b);
간단한 정규식 /[^0-9]/g 정도는 외워두는게 정신건강에 이롭다. 생각보다 사용할일이 많기 때문.
시간이 나면 정규식에 대해 간단하게 포스팅도 해봐야겠다.
여튼.. 정규식으로 숫자를 제외한 모든 문자열을 없애준 뒤, split("") 매서드로 배열의 형태로 바꿔 준 뒤,
map() 매서드를 이용해 원소들을 숫자형으로 변경 해주고, 오름차순으로 정렬해주었다.
숨어있는 숫자의 덧셈(1)
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
풀이
const solution = (my_string) =>
my_string.replace(/[^0-9]/g, "")
.split("")
.reduce((acc, cur) => {
acc += +cur;
return acc;
}, 0)
위의 문제와 유사하게 정규식으로 숫자만 남겨준 뒤, split()으로 배열 변환, 그리고 이번엔 합계를 구해야 하니까
reduce로 cur 자체에 +cur 로 숫자형으로 바꿔준뒤 합게를 리턴해줬다.
소인수분해
문제 설명
소인수분해란 어떤 수를 소수들의 곱으로 표현하는 것입니다. 예를 들어 12를 소인수 분해하면 2 * 2 * 3 으로 나타낼 수 있습니다. 따라서 12의 소인수는 2와 3입니다. 자연수 n이 매개변수로 주어질 때 n의 소인수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 2 ≤ n ≤ 10,000
풀이
const solution = (n) => {
const calcDiv = (n) => {
let divisor = [];
for(let i = 1; i <= n; i ++) if(n % i === 0) divisor.push(i);
return divisor;
}
return calcDiv(n).filter(el => {
return calcDiv(el).length === 2;
})
}
음.. 이렇게 푸는게 맞나 싶긴한데.. 우선 calcDiv 라는 주어진 n의 약수를 배열로 리턴해주는 함수를 만든 뒤,
calcDiv로 n의 약수를 구하고, 각 약수마다 다시 clacDiv로 약수를 구한 뒤, 약수가 2가지인 경우만 filter() 매서드로
추출해서 리턴해주었다.