Problem Solving/백준

[백준-21968] 선린의 터를

<문제>


<Code>

//22114] 창영이와 점프
//입력으로 주어지는 수와 출력해야 하는 정답이 매우 크기 때문에 
//64비트 자료형(long long, %lld로 출력) 사용.
#include <iostream>
#include <vector>
using namespace std;

//double type으로 리턴해주는 pow함수 대체 
unsigned long long my_pow(unsigned long long base, int exp){ 
	unsigned long long res = 1; 
	while(exp){ 
		if (exp & 1){
			res *= base;
		}
		exp >>= 1;
		base *= base;		
	}
	return res; 
}



int main() {
	freopen("input.txt","rt", stdin);
	
	int t; //"선린의 터"의 개수
	scanf("%d", &t); //3
	
	long long input[1001]; //찾아야 하는 선린의 터에 대한 정보
	int binary[1001];
	
	for(int i=0; i<t; i++){
		scanf("%lld", &input[i]);
	}
	
	for(int i=0; i<t; i++){
		int cnt=0; //2진법이 몇자리 수인지 count
		long long answer=0;
		
		long long num=input[i];
		
		//binary vector에 2진법 저장 
		while(num!=0){
			binary[cnt]=num%2;
			cnt++;
			num/=2;	
		}

		//3진법으로 변환
		for(int j=0; j<cnt; j++){
			answer+= my_pow(3, j)*binary[j];
		}
		
		//출력
		printf("%lld\n", answer); 
	}
	return 0;
}

<Comment>

  • 선린의 터 순서: 3^0, 3^1, 3^0+3^1, 3^2…
  • N을 2진법으로 나타내서 배열에 저장하고
  • 3진법으로 바꿔 출력.
    *math.h 라이브러리의 pow함수는 double형으로 리턴하므로 임의의 my_pow라는 long long형으로 리턴해주는 함수를 찾았음.(내가 안씀)

https://www.acmicpc.net/problem/21968

 

21968번: 선린의 터를

입력으로 주어지는 수와 출력해야 하는 정답이 매우 크기 때문에 64비트 자료형(C/C++은 long long, Java는 long, %lld로 출력)을 사용해야 한다.

www.acmicpc.net