문제 링크 https://programmers.co.kr/learn/courses/30/lessons/68935
문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
n은 1 이상 100,000,000 이하인 자연수입니다.
풀이 과정
3진법 상에서 앞뒤로 다시 뒤집어야 하니 reverse함수는 필요없다.
뒷 자리수부터 3의 0제곱, 3의 1제곱, … 3의 n제곱을 곱해주면
3진법에서 10진법으로 바꿀 수 있다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
string Num(int n){
string str = "";
while(n != 0){
str += to_string(n % 3);
n /= 3;
}
return str;
}
int solution(int n) {
int answer = 0;
string str = Num(n);
int cnt = 0;
for(int i = str.size() - 1; i >= 0; i--){
answer += (str[i] - '0') * pow(3, cnt);
cnt++;
}
return answer;
}
#include <string>
#include <vector>
using namespace std;
string Num(int n){
string str = "";
while(n != 0){
str += to_string(n % 3);
n /= 3;
}
return str;
}
// pow함수 구현
int pow(int x, int n){
if(n == 0) return 1;
else if(n == 1) return x;
else return x * pow(x, n - 1);
}
int solution(int n) {
int answer = 0;
string str = Num(n);
int cnt = 0;
for(int i = str.size() - 1; i >= 0; i--){
answer += (str[i] - '0') * pow(3, cnt);
cnt++;
}
return answer;
}
댓글남기기