[C_C++]코딩테스트 연습/[프로그래머스] level 1

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

코딩굼벵이 2021. 7. 18. 22:14
728x90

 

내 풀이

  1. 모든 진수는 십진수를 해당 진법 수로 나눈 나머지를 일의자리부터 차례로 넣어 구할 수 있다. (주어진 십진수는 몫으로 갱신 필요)
  2. 나머지를 순서대로 push하면 일의자리부터 넣었기 때문에 역순으로 꺼내쓸 수 있다.
  3. v[i]와 곱해줘야 하는 거듭제곱의 증감이 달라 cnt를 따로 선언해줬는데, 이게 싫다면 reverse(v.begin(), v.end())를 해서 사용해도 된다.
#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> v;

    while (n != 0) {
        v.push_back(n % 3);
        n /= 3;
    }
    int cnt = v.size()-1;
    for (int i = 0; i < v.size(); i++) {
        answer += v[i] * pow(3, cnt--);
    }
    return answer;
}