Leetcode Java Reordered Power of 2
업데이트:
문제
코드
class Solution {
public boolean reorderedPowerOf2(int n) {
long count = this.getCount(n);
for (int i = 0; i < 32; i++) {
if (this.getCount(1 << i) == count) {
return true;
}
}
return false;
}
private long getCount(int n) {
long count = 0;
while (n > 0) {
count += (int) Math.pow(10, n % 10);
n /= 10;
}
return count;
}
}
결과
설명
-
앞의 자리가 0이 되지 않도록 순서를 변경하여 2의 거듭 제곱이 될 수 있도록 할 수 있는지 검증하는 문제이다.
-
count에 3번에서 정의한 getCount(int n) 메서드에 n을 넣어 수행한 결과를 넣어준다.
- 주어진 숫자의 0 ~ 9 까지 숫자의 개수를 계산할 getCount(int n) 메서드를 정의한다.
- count는 숫자의 개수를 계산할 변수로, overflow를 방지하기 위해서 long 타입의 0으로 초기화한다.
- n이 0 초과일 때 까지 아래를 수행한다.
- count에 n을 10으로 나눈 값의 나머지를 이용하여 10의 제곱수를 더해준다.
- n에 n을 10으로 나눈 몫을 넣어준다.
- 반복이 완료되면 계산된 count를 반환한다.
- 0부터 32 미만까지 i를 증가시키며 아래를 반복한다.
- 1의 비트를 좌측으로 i만큼 이동한 값을 이용하여 3번에서 정의한 getCount(int n) 메서드를 수행한 결과가 count와 동일하면 거듭 제곱이 가능하므로, true를 주어진 문제의 결과로 반환한다.
- 반복이 완료되면 거듭 제곱을 만들 수 없으므로, false를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기