약수의 개수와 덧셈

Jaemin Jung·2021년 6월 16일
0

Algorithm

목록 보기
2/8
post-thumbnail

문제 설명

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

내가 작성한 코드

function solution(left, right) {
let count = 0;
let result = 0;
    
for (let j = left; j <= right; j++ ){
  count = 0;
  for(let i = 1; i <= j; i++){
    if (j%i===0){
        count ++;
    }
    if (i === j){
     if(count%2 === 0){
      result += j;
     }
     else{
     result -= j;
     }
    }
  }
}
 return result;
}

솔직히 문제를 읽어봤을때 이건 할만 하겠는데? 싶었다.
하지만, 해결하는데 꽤 애먹었다.
내 생각을 코드화 하는 연습이 덜되었다는 증거이다.

이문제는 약수의 개념을 잘 알고있는지, 반복문 활용을 잘 하는지가 중요한것같다.

반복문의 초기값을 left로 설정해서 right까지 하나씩 늘리고,
약수를 하나씩 확인해야 하는건 알겠는데 코드 작성에서 많이 막혔다.
이중 for문에서 left로 설정한 j의 약수를 확인하여 개수를 늘려주는것 까지는 구현하였는데,
j의 약수 개수 파악이 끝났을때 count가 짝수인지 홀수인지 확인을 어디서 해야할지 고민이 많았다.
약수의 마지막은 자기 자신이라는것을 이용해서 i가 j와 같을때,
count 짝수 홀수 여부를 검사하는 조건문을 추가하여 로직을 완성하였다.

채점 결과

문제링크

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

profile
내가 보려고 쓰는 블로그

0개의 댓글