2021 SISS 21기 활동/여름방학 C언어
[HackerRank] Sherlock and Divisiors
hyerang0125
2021. 7. 18. 00:03
2주차 C언어
1. 문제
2. 풀이
int divisors(int n) {
int cnt = 0;
for(int i=1; i<=sqrt(n); i++){
if(n%i == 0){
if(i%2 == 0) ++cnt;
if((n/i)%2 == 0 && (n/i) != i) ++cnt;
}
}
return cnt;
}
- 자기 자신을 제외하고 절반을 초과하는 숫자에서 2로 나누었을 때 나머지가 0이 되는 숫자는 나올 수 없다. 따라서 n의 제곱근만큼 for문을 실행한다.
- n이 i로 나누어 떨어질 때, i가 2로 나누어 떨어진다면 구해야 하는 숫자이므로 cnt를 1 증가시킨다.
- 만약 n을 i로 나눈 값이 2로 나누어 떨어지고, n을 i로 나눈 값이 i가 아니라면 이 역시 cnt를 1 증가시킨다.
- cnt를 반환하고 함수를 종료한다.