Leetcode Java Prime Arrangements
업데이트:
문제
코드
class Solution {
public int numPrimeArrangements(int n) {
boolean[] primes = new boolean[n + 1];
Arrays.fill(primes, 2, n + 1, true);
for (int i = 2; i * i <= n; i++) {
if (primes[i]) {
for (int j = i * i; j <= n; j += i) {
primes[j] = false;
}
}
}
int count = 0;
for (boolean prime : primes) {
if (prime) {
count++;
}
}
long result = 1;
for (int i = 2; i <= count; i++) {
result = (result * i) % 1000000007;
}
for (int i = 2; i <= n - count; i++) {
result = (result * i) % 1000000007;
}
return (int) result;
}
}
결과
설명
- 소수가 소수 지수가 되도록 1부터 n까지 순열의 수를 반환하는 문제이다.
- 단, 답이 매우 클 수 있으므로 모듈러 $10^9 + 7$을 이용해 계산한다.
- 문제 풀이에 필요한 변수를 정의한다.
- primes는 각 위치가 소수인지 저장할 변수로, $n + 1$ 크기의 부울 변수로 초기화하여 소수가 아닌 위치에 false를 넣어준다.
- count는 소수의 갯수를 저장할 변수로, primes를 반복하여 소수의 갯수를 저장해준다.
- result는 결과 값을 저장할 변수로, long형의 1로 초기화한다.
- 아래의 각 경우를 이용하여 순열의 수를 계산 후 result를 int형으로 변경하여 주어진 문제의 결과로 반환한다.
- 소수인 값들을 연속으로 나열하는 경우인 2부터 count 이하까지 i를 증가시키며, result에 $result \times i$에 모듈러 $10^9 + 7$를 적용한 결과를 넣어준다.
- 수사가 아닌 값들을 연속으로 나열하는 경우인 2부터 $n - count$ 이하까지 i를 증가시키며, result에 $result \times i$에 모듈러 $10^9 + 7$를 적용한 결과를 넣어준다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기