[프로그래머스]Algorithm_23.03.30

윤성해·2023년 3월 30일
0

알고리즘

목록 보기
12/22
post-thumbnail

💡 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 을 활용 가능하다.

profile
Slow and steady wins the race.

1개의 댓글

comment-user-thumbnail
2023년 3월 31일

잘 하고 있군!

답글 달기