C++ 3진법 뒤집기 - Programmers
Updated:
코딩테스트 연습 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