Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 약수의 개수와 덧셈 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 약수의 개수와 덧셈

썸머몽 2023. 4. 10. 19:51
728x90

문제 및 제한사항

 

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

 

**제한사항**

1 ≤ left ≤ right ≤ 1,000

 

풀이 방법

 

예를 들어 left = 13, right = 17일 때, 13 ~ 17까지 수들 중 약수의 개수가 짝수일 때 해당 수를 더하고 홀수일 때 해당 수만큼 빼주면 된다. 

 

먼저 left 에서 right까지 갈 수 있도록 while문을 짜서 마지막에 1씩 더해 right보다 커지면 멈추게 한다.

while문 안에서는 left의 약수를 알아본다. for문으로 1부터 시작하는 변수 i로 left를 나눴을 때 나머지가 0이라면 i는 left의 약수이므로 while문 안에 만들어둔 빈 배열에 추가한다. 이 때 빈 배열이 while문 밖에 있으면 제대로 작동하지 않으니 주의.

for문이 끝나고 이 배열이 길이를 2로 나눴을 때 나머지가 없다면 짝수이므로 sum에 left를 더해주고, 나머지가 있다면 홀수이므로 left를 빼주면 된다.

 

복습하려고 다시 풀어보다가 answer 배열을 바깥에 둬서 오류가 나 한참을 씨름했다; while 문은 왜 해도 해도 실수가 생길까... 

당연함 내가 잘 몰라서 그럼

 

 

코드

function solution(left, right) {
    let sum = 0;
    
    while (left <= right) {
        let answer = []
        for (let i = 1; i <= left; i++) {
            if (left % i === 0) {
                answer.push(i)
            }
        }
        if (answer.length % 2 === 0) {
            sum += left
        } else {
            sum -= left
        }
    left++
    } return sum
}
728x90