정말 신기한 문제 비트연산자와 이진법을 활용하는 방법을 알아둘 필요가 있다고 느꼈다. 핵심은 3의 제곱수를 하나씩만 사용할 수 있다. 라는 조건이다.
몇번째인지를 나타내는 숫자 N을 이진수로 바꾸면 다음과 같다.
이 때 각 자릿수가 2의 제곱수를 나타내지만 3의 제곱수로 생각하는 것이다. 따라서 다음과 같다.
비트연산자를 이용하면 별도의 2진수 변환 과정을 거치지 않아도 되며 빠르게 확인할 수 있다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long N = sc.nextLong();
long answer = 0;
int count = 0;
while (N > 0) {
if ((N & 1) == 1) {
answer += power(3, count);
}
count++;
N = (N >> 1);
}
System.out.println(answer);
}
private static long power(long a, long b) {
if(b == 0) return 1;
if(b == 1) return a;
long temp = power(a, b / 2);
if(b % 2 == 0) {
return (temp * temp);
} else {
return ((temp * temp) * a);
}
}
}