C++ 3진법 뒤집기 - Programmers

Updated:

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


3진법 뒤집기

문제 설명

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

제한 사항

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

입출력 예

n = 45
result = 229

입출력 예 설명

답을 도출하는 과정은 다음과 같습니다.

  • n (10진법) : 45
  • n (3진법) : 1200
  • 앞뒤 반전(3진법) : 0021
  • 10진법으로 표현 : 7

코드

#include <string>
#include <vector>
#include <math.h>

using namespace std;

int solution(int n) {
    int answer = 0;
    int quotient = 1;  // 몫
	int remainder = 0; // 나머지

    vector<int> rev;

    while (quotient != 0)
	{
		quotient = n / 3;
		remainder = n % 3;

		if (!(rev.size() == 0 && remainder == 0)) // 처음에 0이면 뒤집으면 없어짐
			rev.push_back(remainder);

		n = quotient;
	}

    int size = rev.size();
	for (int i = 0; i < size; i++)
	{
		answer += rev[(size - 1) - i] * pow(3, i);
	}

    return answer;
}

고찰

진법 변환 방식이 처음에 기억이 나지 않아 시간을 낭비하였다. 코드를 분석하기 쉬운 코드와 line 수가 적은 코드의 비율을 잘 정해야 할 것 같다.

Leave a comment