문제 링크 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;
}

댓글남기기