TIL 20230318(온보딩 11일차)
function solution(n) {
let str = String(n)
let result = 0
for(i=0; i<str.length; i++){
result += Number(str[i])
}
return result;
}
console.log(solution(1234))
console.log(solution(930211))
정수 n을 매개변수로 받고 n의 각자리 숫자의 합을 리턴하는 함수이다. 각 요소가 분리되어 있지 않고 1234 => 천이백삼십사 같이 합쳐져 있기 때문에 String 함수를 써서 문자열화 시켜준다. 반복문을 사용해 문자열화 시킨 str의 i번째 인덱스를 Number 함수를 사용해 result에 계속 더해준다. 만약 Number 함수를 사용하지 않았을 경우 문자열 '1' , '2' , '3' , '4' 가 result 에 들어가기 때문에 01234가 출력되게 된다. 즉 Number 함수로 숫자 변환 후 증감연산자를 통해 더한 것이다.
function solution(n) {
var answer = 0;
for(i=0; i <= n; i++){
if(n % i === 0){
answer++
}
}
return answer;
}
console.log(solution(20))
console.log(solution(100))
n을 n 이하의 자연수만큼 나누어서 몇번이나 나누어 떨어지는지 카운트하면 문제를 해결할 수 있을거라고 생각했다.
i는 n 이하만큼 반복하게 되면서 n 과 i 가 몇번이나 나누어 떨어지는지 answer에 카운트되게 된다.
function solution(hp) {
let 장군 = Math.floor(hp / 5)
let 병정 = Math.floor((hp%5)/3)
let 일 = Math.floor((hp%5)%3)/1
return 장군+병정+일;
}
console.log(solution(23))
console.log(solution(24))
console.log(solution(999))
매개변수 hp에 23이 들어온다면 먼저 변수 장군에서 4가 할당되고 병정에서 hp를 5로 나눈 나머지를 다시 3으로 나눈 1이 할당된다.
그 후 일에서는 hp % 5 = 3 -----> 3 % 3 = 0 ----> 0 / 1 = 0 이므로 0이 할당된다.
마지막으로 장군 병정 일 변수 값들을 모두 더해서 리턴하면 최소한의 병력을 구성한 수를 구할 수 있게 된다.
function solution(my_string) {
var answer = 0;
let arr = Array.from(my_string)
let number1 = arr.filter((a) => a = Number(a))
let result = 0
for(i= 0; i < number1.length; i++){
result += Number(number1[i])
}
return result ;
}
console.log(solution("aAb1B2cC34oOp"))
console.log(solution("1a2b3c4d123"))
매개변수 내의 모든 자연수의 합을 구해야 하므로 먼저 매개변수 내에서 숫자만 골라내봤다.
Array.from 함수를 사용해 arr 에 매개변수를 배열로 변환한 값을 할당해줬다. filter 함수와 Number 함수를 사용해 arr 배열 내에 있는 숫자만 골라서 콜백해 변수 number1에 할당했다.
반복문을 돌면서 number1의 i번째 인덱스 요소를 다시 Number 함수를 이용해 숫자로 바꾼 뒤 result에 반복하여 합산했다.
function solution(my_string) {
var answer = 0;
let arr = Array.from(my_string)
let number1 = arr.filter((a) => !isNaN(a))
let result = 0
for(i= 0; i < number1.length; i++){
result += Number(number1[i])
}
return result ;
}
console.log(solution("aAb1B2cC34oOp"))
console.log(solution("1a2b3c4d123"))
이와 같이 !isNaN을 사용할 수 도 있다.
function solution(my_string){
let answer = 0
let num = /[^0-9]/g
let cutStr = my_string.replace(num, "") //1234
let arrMy = Array.from(cutStr) //['1', '2', '3', '4']
let mynum = arrMy.map(Number) //[1, 2, 3, 4]
for(i=0; i<mynum.length; i++){
answer += mynum[i]
}
return answer
}
/[^0-9]/g 와 replace 함수를 사용해서 숫자를 걸러낸 방법이다.
replace 함수는 replace(바꿔질 요소, 바꿀 요소) 가 들어가게 되는데 이때 바꿔질 요소에 num이 들어가면서 숫자가 아닌 요소들을 지정하게 되고 ""를 통해 숫자가 아닌 요소만 지워지게 된다.
변수 num과 cutStr에 해당하는 내용은 두줄이 항상 붙어다닌다고 생각하면 된다.
function solution(my_string) {
let arr = Array.from(my_string)
let number1 = arr.filter((a) => !isNaN(a))
let result = []
for(i = 0; i < number1.length; i++) {
result.push(Number(number1[i]))
} return result.sort((a,b)=>a-b)
}
console.log(solution("hi12392"))
console.log(solution("p2o4i8gj2"))
console.log(solution("abcde0"))
Array.from 함수로 배열로 바꿔줬고 filter 함수와 !isNaN을 활용해 number1에 숫자만 담은 배열을 할당해줬다.
반복문을 사용해 number1의 i번째 인덱스가 Number 함수를 사용해 숫자 데이터로 result에 담길 수 있도록 push 메소드를 사용했다.
그 후 최종적으로 sort 함수를 사용해 오름차순으로 정렬하여 리턴했다.
function solution(my_string) {
return my_string.split("").filter((v) => !isNaN(v)).map((v) => v*1).sort((a,b) => a-b)
}
여기서 유의깊게 봐야할 점은 map함수를 사용해 v*1을 해줌으로서 숫자형 데이터로 콜백이 되는 점이다.