Leetcode Java Prime Number of Set Bits in Binary Representation
업데이트:
문제
코드
class Solution {
public int countPrimeSetBits(int left, int right) {
Set<Integer> primes = new HashSet<>(Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19));
int count = 0;
for (int idx = left; idx <= right; idx++) {
int bits = 0;
for (int n = idx; n > 0; n >>= 1) {
bits += n & 1;
}
if (primes.contains(bits)) {
count++;
}
}
return count;
}
}
결과
설명
-
left에서 right까지 각 숫자를 이진수로 표현할 때 1의 개수가 소수인 숫자의 개수를 계산하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- primes는 소수를 넣어 저장할 변수로, 2 ~ 19까지 소수를 넣어 저장한다.
- left와 right의 범위는 $1 <= left <= right <= 10^6$ 이다.
- $10^6 = (10^3)^2 < (2^{10})^2 = 2^{20}$를 만족하므로 이진수로 변환할 경우의 최대 길이는 20이다.
- 그렇기 때문에 20 이상의 소수는 저장할 필요가 없으므로, 19까지 넣어준다.
- count는 이진 표현법 내 소수인 숫자의 개수를 저장할 변수로, 0으로 초기화한다.
- primes는 소수를 넣어 저장할 변수로, 2 ~ 19까지 소수를 넣어 저장한다.
- left부터 right까지 idx를 증가시키며 아래를 반복한다.
- bits는 1의 개수를 저장할 변수로, 0으로 초기화한다.
- idx부터 0 초과일때 까지 n의 비트를 우측으로 하나씩 이동시키며 bits에 1의 개수를 저장한다.
- primes에 bits가 포함되는 경우, count를 증가시킨다.
- 반복이 완료되면 조건을 만족하는 숫자의 개수인 count를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기