Algorithm/Programmers(c++)

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

kim-hasa 2021. 7. 29. 15:24

https://programmers.co.kr/learn/courses/30/lessons/68935#

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

3진법 계산법에 따라서 while문으로 계산하고, 마지막 몫을 벡터에 넣습니다.

 

벡터의 뒤부터 3진법으로 계산하면 뒤집어서 계산됩니다.

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> triple;     // 3진법을 저장하기 위한 벡터
    int div;                // 3진법 계산을 위한 변수
    int three = 1;          // 10진법으로 곱셈을 위한 변수
    
    while(n >= 3)
    {
        div = n % 3;
        triple.push_back(div);
        n = n/3;
    }
    
    triple.push_back(n);    // 마지막 몫을 넣음
    
    for(int i=triple.size()-1; i>=0; i--)   // 뒤에서부터 3진법 계산
    {
        answer += triple[i] * three;
        three = three * 3;
    }
    
    return answer;
}

※ 코드가 지저분 할 수 있습니다.