[TIL]231213_프로그래머스 내적, 약수의 개수와 덧셈

ㅇㅖㅈㅣ·2023년 12월 13일
2

Today I Learned

목록 보기
42/93
post-thumbnail

👩🏻‍💻 Today Learn

  • 알고리즘 1문제
  • Typescript 강의

🔐 알고리즘 문제풀이

문제) 내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]b[0] + a[1]b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

풀이

function solution(a, b) {
    let answer = 0;
    
    for(let i=0; i<a.length; i++){
        answer += a[i]*b[i]
    }
    return answer;
}

익숙한 for문을 사용해서 풀어보았지만 참고할만한 다른사람의 풀이도 함께 가져와봤다.

다른사람의 풀이

function solution(a, b) {
    return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}

reduce() 사용!!


문제) 약수의 개수와 덧셈

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

풀이

function solution(left, right) {
    let answer = 0;
    
    for (let i=left; i<=right; i++){ 
       let leftRight=[]; 
        for (let a=0; a<=i; a++){
            if(i%a===0) leftRight.push(a) // 약수 구하기
        }
    leftRight.length%2===0 ? answer += i : answer -= i
       }
    return answer;
}

for문으로 left에서 right까지의 숫자를 돌고 다시 그 숫자들 하나씩 돌면서 약수를 구해 배열에 넣는다.

삼항연산자를 이용해 그 배열의 길이가 짝수이면 더해서 answer에 담고 홀수이면 빼준 후에 최종값을 반환해준다!

다른사람의 풀이

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

Number.isInteger() 메서드는 전달된 값이 정수인지 여부를 확인
Math.sqrt() 메서드는 숫자의 제곱근을 반환


✍🏻 회고

알고리즘 문제가 하나씩 다음단계 문제를 푸는데 체감으로는 10단계씩 건너뛰는 느낌이다. 이제는 메서드를 검색해보거나 다른사람의 풀이를 참고하지 않으면 턱턱막히는데 그래도 꾸준히 푸는게 중요하겠지 라며 위안을 삼아본다..

profile
웰씽킹_나는 경쟁력을 갖춘 FE개발자로 성장할 것이다.

1개의 댓글

comment-user-thumbnail
2023년 12월 14일

파이팅

답글 달기