코딩 공부/코딩테스트

코딩테스트 연습문제 Lv. 1 (29) - 약수의 개수와 덧셈

천서리 2023. 7. 9. 18:13
QUOTE THE DAY

“ 당신이 6개월 이상 한 번도 보지 않은 코드는 다른 사람이 다시 만드는 게 훨씬 더 나을 수 있다. ”

- 이글슨 (Eagleson)
반응형

코딩테스트 연습문제  Lv. 1

출처  https://programmers.co.kr/https://programmers.co.kr/

 

프로그래머스

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

programmers.co.kr


약수의 개수와 덧셈

문제

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

 

 

제한사항

  • 1 ≤ left  right ≤ 1,000

 

입출력 예

left right result
13 17 43
24 27 52

 

입출력 예 설명

 

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

 

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

 

 

solution.js

function solution(left, right) {
  let answer = 0;

  for (let num = left; num <= right; num++) {
    let divisorCount = 0;

    for (let i = 1; i <= num; i++) {
      if (num % i === 0) {
        divisorCount++;
      }
    }

    if (divisorCount % 2 === 0) {
      answer += num;
    } else {
      answer -= num;
    }
  }

  return answer;
}
  1. 초기 변수 answer를 0으로 설정합니다.
  2. left부터 right까지의 수를 하나씩 확인하기 위해 반복문을 사용합니다. 변수 num을 left로 초기화하고 num이 right 이하일 때까지 반복합니다.
  3. 각 수 num에 대해 약수의 개수를 구하기 위해 변수 divisorCount를 0으로 초기화합니다.
  4. 1부터 num까지의 수를 하나씩 확인하기 위해 반복문을 사용합니다. 변수 i를 1로 초기화하고 i가 num 이하일 때까지 반복합니다.
  5. 만약 num을 i로 나눈 나머지가 0이라면 (num % i === 0), i는 num의 약수이므로 divisorCount를 증가시킵니다.
  6. 약수의 개수가 짝수인지 홀수인지 판별하기 위해 divisorCount를 2로 나눈 나머지를 확인합니다.
  7. 만약 divisorCount가 0이라면 (divisorCount % 2 === 0), num의 약수 개수가 짝수이므로 num을 answer에 더합니다.
  8. 그렇지 않으면 (divisorCount % 2 !== 0), num의 약수 개수가 홀수이므로 num을 answer에서 뺍니다.
  9. 반복문이 종료되면 최종적으로 계산된 answer를 반환합니다.

 

반응형
Adventure Time - BMO