💡 reduce!!!!!????? / Array.from(배열을 얕은복사한다.)
1+0 = 1 , 10 / 1 은 나누어떨어진다. true !
인덱스값은 number 타입에서는 접근이 불가하다. 그렇다면 문자열(string) 타입으로 바꿔주자. 다시 number로 바꿔야함
1.
function solution(x) {
x = String(x);
let sum = 0;
for (let i = 0; i<x.length; i++){
console.log(i, x[i])
sum += Number(x[i]); // 여기지금 문자열이라서 더해진 값이 아닌 010 출력됨->다시 넘버로
}
return x % sum === 0;
}
2.부정연산자
function solution(x) {
x = String(x);
let sum = 0;
for (let i = 0; i<x.length; i++){
console.log(i, x[i])
sum += Number(x[i]); // 여기지금 문자열이라서 더해진 값이 아닌 010 출력됨->다시 넘버로
}
return !(x % sum) // 0이 나오면 false 값 가져오니까 앞에 부정연산자 붙였다.
}
3. reduce
숫자에서 (정수타입임) reduce 사용이 안되서, x를 배열로 만들거임.
x를 문자열로 만들고, 하나하나 쪼개서 배열로 만든다.
function solution(x) {
const sum = String(x)
.split("")
.reduce((acc,cur)=> {
return acc + Number(cur);
},0); // 초기 값의 타입으로 acc의 타입이 결정된다.
return x % sum === 0;// !(x % sum) 로 쓸 수 있음.
}
1.
function solution(num) {
let count = 0; //시도한 횟수
for (let i = 0; i < 500; i++){
if ( num ===1 ){
count = i;
break;
}
console.log(num,i)
num = num % 2 === 0
? num / 2//짝수가 맞다면
: (num * 3) + 1//홀수가 맞다면
}//count 변수가 0을 가진다면===500버 반복해도 1 안된다면
//-1 리턴
return count === 0 ? -1 : count;
}
2.
function solution(num) {
for (let i = 0; i < 500; i++){
if ( num ===1 ){
return i;
}
num = num % 2 === 0
? num / 2//짝수가 맞다면
: (num * 3) + 1//홀수가 맞다면
}
//count 변수가 0을 가진다면===500버 반복해도 1 안된다면
//-1 리턴
// return count === 0 ? -1 : count;
return -1 // vfor문 끝나도 함수가 리턴안되면
}
3.메서드 reduce
-> 리듀스는 500번 다돌아야함 break 안먹혀서 오히려 더 비효율적이다.
function solution(num) {
let count = 0;
const answer =Array.from (new Array(500),_ =>1)
.reduce((acc, cur)=>{
if (acc !==1){
count++;
return acc % 2 === 0
? acc / 2
: (acc * 3) + 1;
}
return acc;//여기부터는 무조건 1 받는다.
},num)
return answer === 1? count: -1;
}
from만 가지고 위 이미지의 fill,map 을 활용 가능하다.
잘 하고 있군!