Coding Test/programmers
[프로그래머스] 3진법 뒤집기 c++
owls
2022. 9. 13. 12:53
728x90
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
45 | 7 |
125 | 229 |
풀이
string을 사용한 풀이 방식입니다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int solution(int n) {
int answer = 0;
string strThird("");
while(n > 0){
int tmp = n % 3;
n /= 3;
strThird += to_string(tmp);
}
int len = strThird.size() - 1;
for(int i = 0; i <= len ; i++){
int tmp = strThird[i] - '0';
answer += tmp * pow(3 , len - i);
}
return answer;
}
다른 방법
vector를 사용한 풀이 방식입니다.
vector 원소를 뒤에서 부터 접근하여 10진수로 변환합니다.
3진수를 10진수로 변환하기 위한 k값을 3씩 곱하게 하여 자릿수에 맞게 계산하도록 합니다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> v;
while(n > 0){
v.push_back(n%3);
n/=3;
}
int k = 1;
while(!v.empty()) {
answer += k*v.back();
v.pop_back();
k*=3;
}
return answer;
}
728x90