알고리즘 19

su glass·2022년 7월 24일
0

알고리즘 공부

목록 보기
19/19

약수의 개수와 덧셈

문제 설명

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

제한사항

1 ≤ left ≤ right ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52
입출력 예 설명
입출력 예 #1

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

수 약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수
24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

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

맨 처음 생각한 방법은
1. 1부터 1000까지 숫자 대입 가능하게 if로 조건 걸기
2. 대입한 숫자와 사이의 수의 약수를 알기 위해 for 사용
3. 약수의 수가 짝수인지 홀수인지 판별
4. 짝수인 수와 홀수인 수를 각 각 더하고 뺌
5. 더하고 뺀값을 리턴값으로 출력
이거 였지만 이렇게 한다면 if안에 for, for안에 if 등 너무 복잡해서 다시 검색하고 생각하며 풀어본 결과

re 1. for을 이용하여 left부터 right 까지함
2. 하나의 함수를 만들고 for을 사용하여 숫자가 사라질때 까지 2로 나누고
3. 나누어지면 answer에 +, 안 나누어지면 answer에 - 로 하여 더하고 뺀다.
4. answer을 리턴값으로 출력
이렇게 새로 풀었다.
기말고사 후 바로 수술하고 거의 2달 만에 문제를 풀어서 가물가물하고 힘들었지만
천천히 떠올리면서 풀었더니 어느 정도 할 수 있었다.

profile
시작한 코딩 공부 노트

0개의 댓글