- 해당 문제는 3진법으로 변환하면 쉽게 해결되는 문제이다
- 10진법을 n진법으로 만드는 과정은 다음과 같다.
1) 10진법의 수를 변환하고자 하는 숫자 n으로 나눈 후 (몫 / 나머지를 구한다)
2) 나머지는 순서대로 오른쪽에 위치시키며, 몫은 0이 될 때 까지 나눈다.
3) 나오는 나머지를 역순으로 배열시키면 n진법으로 변환한 수가 나온다
- n진법이 된 수를 다시 10진법으로 변환하기 위해서
<cmath>
에 있는pow()
를 사용!<string>
에 있는reverse()
를 통해 string 및 vector등을 거꾸로 위치시킬 수 있음 !
#include <string> // reverse()를 사용하기 위함 #include <vector> #include <algorithm> #include <cmath> // pow()를 쓰기 함 - 제곱근 using namespace std; int solution(int n) { int answer = 0; vector<int> v; /* 3진법으로 변환시키는 코드! */ while(n!=0) { v.push_back(n%3); n/=3; } reverse(v.begin(), v.end()); /* 다시 10진법으로 변환시키는 코드 ! */ for(int i=0;i<v.size();i++) { answer += pow(3,i) * v[i]; } return answer; }