본문 바로가기
공부/코딩테스트

프로그래머스/C# - 약수의 개수와 덧셈

by 잰쟁 2024. 6. 14.
728x90

 

 

문제 설명

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

 

 

제한사항

  • 1 ≤ left  right ≤ 1,000

 

입출력 예

 

 

 

 

 

 

풀이

using System;

public class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        int num = 0;
        for(int i = left; i<=right; i++)
        {
            for(int j = 1; j<=i; j++)
            {
                if(i%j == 0)
                {
                    num++;
                }
            }
            answer += (num%2 == 0) ? i : -i;       
            num = 0;
        }
        return answer;
    }
}

 

: 우선 문제를 보고 중첩 for문을 써야겠다고 생각했다.

 1) 약수를 구하는 for문

 2) left ~ right까지 돌며 약수의 개수에 따라 answer에 가감해주는 for문

 

그 중에서 1)번 for문은 2)번 for문보다 선행되어야 하므로  1)번 for문을 2)번 for문 안에 넣어주었다.

2)번 for문에서 i는 매개변수 left ~ right 사이의 수이고, 1)번 for문에서 j는 1 ~ i까지의 수이다.

 

우선 약수의 갯수를 나타내주는 int num을 선언해준다.

1)번 for문에서 1 ~ i까지 돌며 i값과 나누어 떨어지는 수가 있으면, num을 1씩 증가시킨다. 

1)번 for문을 빠져나오면 2)번 for문에서 약수의 갯수를 센 num가 짝수인지 홀수인지 구분하고,

그에 따라 반환할 값인 answer에 i를 가감해준다.

가감한 후 다시 1)번 for문을 돌며 left ~ right 값의 약수를 구해야 하기 때문에 num를 초기화 시켜준다!

 

순서 : 1) for문에서 약수의 갯수 구하기 --> 2)번 for문에서 약수의 갯수 홀짝 구분 및 반환값 가감

          --> 다시 1)번 for문에서 약수 구하기 · · · · ·

 

 

.

.

.

.

 

사담) 

처음에 List를 써야하나 Dictionary를 써야하나 고민을 했는데

계속 생각하다보니 굳이 List나 Dictionary에 값을 저장할 필요가 없다는 것을 깨달았다,,

이거 고민하는데 시간을 좀 쓴듯ㅜ