728x90
반응형
힌트
더보기
- 유한 소수는 분모를 최대 약분했을 때 2나 5만 존재해야한다
정답
더보기
방법 1
while(b % 2 == 0) b /= 2;
while(b % 5 == 0) b /= 5;
if(a%b!=0)return 2;
return 1;
방법 2
while(b % 2 == 0) b /= 2;
while(b % 5 == 0) b /= 5;
if(a%b!=0)return 2;
return 1;
for(int i=(a > b ? b : a); i>= 2; i--){
if(a%i==0 && b%i==0){
a/=i;
b/=i;
break;
}
}
if(b==1)return 1;
var denomArr = Enumerable.Range(1,b).Where(x=> (b % x == 0 && x != 1 && x % 2 != 0)|| x == 2);
var demArr = denomArr.Where(x=> !denomArr.Any(y=> y != x && x % y == 0));
return demArr.Any(x=> x!=2 && x!= 5) ? 2 : 1;
해석
더보기
while(b % 2 == 0) b /= 2;
while(b % 5 == 0) b /= 5;
분모를 2와 5로 나누었을 때 나머지가 0일 경우 계속 반복해서 나누어 준다
if(a%b!=0)return 2;
이후 분자와 분모를 나누었을 때 나머지가 0이 아니면 무한 소수이다
for(int i=(a > b ? b : a); i>= 2; i--)
a와 b 중 작은 수 만큼 반복한다
if(a%i==0 && b%i==0){
a/=i;
b/=i;
break;
}
a와 b 중 작은 수에서 점점 숫자가 1만큼 작아진 값이 a와 b를 나누었을 때 나머지가 0일 경우 해당 수를 나누어 주고 반복을 멈춘다
var denomArr = Enumerable.Range(1,b).Where(x=> (b % x == 0 && x != 1 && x % 2 != 0)|| x == 2);
1부터 분모의 값 개수만큼 숫자를 만든 뒤 숫자들 중 b를 나누었을 때 나머지가 0이되고 1이 아니며 2의 배수가 아닐 경우 이거나 2인 경우를 저장한다
var demArr = denomArr.Where(x=> !denomArr.Any(y=> y != x && x % y == 0));
denomArr에 저장한 값들이 같은 숫자가 아니고 다른 숫자와 나누었을 때 나머지가 0이 되지않는 경우에만 저장한다
return demArr .Any(x=> x!=2 && x!= 5) ? 2 : 1;
demArr에서 2와 5가 아닌 숫자가 존재할 경우 2를, 존재하지 않을 경우 1을 리턴한다
728x90
반응형
'C#' 카테고리의 다른 글
[프로그래머스 힌트/답/해석] 문자열 밀기 (0) | 2024.01.30 |
---|---|
[프로그래머스 힌트/답/해석] 저주의 숫자 3 (1) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 치킨 쿠폰 (0) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 등수 매기기 (0) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 로그인 성공? (0) | 2024.01.30 |