18. 프로그래머스(1단계) - 약수의 개수와 덧셈

성훈·2021년 8월 7일
0

Algorithm

목록 보기
18/61
post-thumbnail

📌 문제의 조건

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

제한사항 🤔

  • 1 ≤ left ≤ right ≤ 1,000

📌 풀이

의사 코드 👨‍💻

  1. left 부터 right까지 배열에 푸쉬한다.
  2. 리듀스로 만약 제곱근이 정수라면 (제곱근에 소수점 이하를 지웠을때와 제곱근이 같을때) ACC에서 빼고 아니라면 ACC에 더한다.

첫 풀이 👨‍💻

function solution(left, right) {
    let arr = [];
    for(let i = left; i < right+1; i++){
        arr.push(i)
    }
    return arr.reduce((acc, cur)=>{
       if(Math.sqrt(cur) === Math.floor(Math.sqrt(cur))){
          return acc - cur;
       } 
        return acc + cur;
    },0)
}

📌 리뷰

right + 1 안하고 왜 안되지 갸웃거리다가 로그 찍어보고 바로 풀었다.

new Array.fill로도 어떻게 할 수 있었을거 같은데 한번 궁리해봐야겠다.

📌 문제 출처

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges#

profile
어떻게 이걸 풀어낼 수 있을까

0개의 댓글