문제 설명
두 정수 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에 값을 저장할 필요가 없다는 것을 깨달았다,,
이거 고민하는데 시간을 좀 쓴듯ㅜ
'공부 > 코딩테스트' 카테고리의 다른 글
프로그래머스/C# - 최소 직사각형 (0) | 2024.06.18 |
---|---|
프로그래머스/C# - 명예의 전당(1) (0) | 2024.06.17 |
프로그래머스/C# - 내적 (0) | 2024.06.13 |
프로그래머스/C# - 수박수박수박수박수박수? (0) | 2024.06.13 |
프로그래머스/C# - 가운데 글자 가져오기 (0) | 2024.06.11 |