이노베이션 캠프/3주차_알고리즘

[JS] 약수의 개수와 덧셈

hani:) 2023. 6. 21. 10:50

문제

https://school.programmers.co.kr/learn/courses/30/lessons/77884

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

풀이1. for문 사용

function findDiv(num) { // 약수의 개수 구해주는 함수 (매개변수: 숫자 (int), 리턴 값: 숫자 (int))
    let count = 0;
    
    // 약수는 1부터 시작
    for (let i=1; i<=num; i++) {
        if (num % i === 0) { // i로 나눈 나머지 값이 0이면 약수
            count++;
        }
    }
    return count;
}

function solution(start, end) {
	// 1. from() 메소드 사용하여 특정 범위로 이루어진 숫자 배열 생성
        // Array.from(arrayLike[, mapFn[, thisArg]])
        // arrayLike: 배열로 반환하고자 하는 객체
        // mapFn: 배열의 모든 요소에 대해 호출할 맵핑 함수
        // thisArg: this로 사용할 값
    let numbers = Array.from({length: end-start + 1}, (_, i) => i + start);
    
    let result = 0;
    
    // 2. for of문 사용하여 배열의 요소에 접근
    for (num of numbers) {
    
    	// 3. 약수의 개수를 구하기 (매개변수: 배열의 요소)
        let count = findDiv(num);
        
        // 4. 약수의 개수에 따라 연산자 다르게 사용하여 값 저장
        if (count % 2 === 0) { // 짝수
            result += num;
        } else { // 홀수
            result -= num;
        }
    }    
    return result;
}

 

풀이2. map 사용

function findDiv(num) {
    let count = 0;
    for (let i=1; i<=num; i++) {
        if (num % i === 0) {
            count++;
        }
    }
    return count;
}

function solution(start, end) {
    let numbers = Array.from({length: end-start + 1}, (_, i) => i + start);
    
    let result = 0;
	numbers.map((num) => {
        let count = findDiv(num);
        
        if (count % 2 === 0) { // 짝수
            result += num;
        } else { // 홀수
            result -= num;
        }
        return true;    
    });
    return result;
}

 

결론

  • 성능 차이는 비슷함.

[for문 성능]

[map 성능]

 

728x90