Coding Test/programmers

[프로그래머스] 3진법 뒤집기 c++

owls 2022. 9. 13. 12:53
728x90

문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한 사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

n result
45 7
125 229

풀이

string을 사용한 풀이 방식입니다.

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    string strThird("");
    while(n > 0){
        int tmp = n % 3;
        n /= 3;
        strThird += to_string(tmp);
    }
    
    int len = strThird.size() - 1;
    for(int i = 0; i <= len ; i++){
        int tmp = strThird[i] - '0';
        answer += tmp * pow(3 , len - i);
    }
    
    return answer;
}

 

다른 방법

vector를 사용한 풀이 방식입니다.

vector 원소를 뒤에서 부터 접근하여 10진수로 변환합니다.

3진수를 10진수로 변환하기 위한 k값을 3씩 곱하게 하여 자릿수에 맞게 계산하도록 합니다.

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> v;
    while(n > 0){
        v.push_back(n%3);
        n/=3;
    }
    int k = 1;
    while(!v.empty()) {
        answer += k*v.back();
        v.pop_back();
        k*=3;
    }

    return answer;
}
728x90