*string을 사용한 초기 작성 코드
더보기
#include <string>
#include <vector>
#include <cmath>
using namespace std;
string Trit(int n)
{
string Result = "";
while(n != 0)
{
Result += to_string(n % 3);
n /= 3;
}
return Result;
}
int solution(int n) {
// 3진법으로 변환하며 string에 뒤에 자리부터 저장
string R_Trit = Trit(n);
int answer = 0;
// 3진법으로 변환하고 뒤집힌 n을 다시 10진법으로 변환
int i = R_Trit.length() - 1;
for(int j = i; j >= 0; --j)
{
answer += (R_Trit[i - j] - '0') * pow(3, j);
}
return answer;
}
10진법을 3진법으로 변환하는데 이걸 앞뒤를 바꿔서 저장해야 된다는 생각에 string으로 풀었었다. (vector로 해도 동일한데.. 문제 풀 때는 string으로 풀면 더 효율적일 것 같다는 착각을;;)
다른 사람의 풀이를 보고, vector를 사용해서 더 코드가 심플하게 읽혀서 그 방식을 참고해서 다시 풀어보았다.
*vector만을 사용해 더 간결하게 수정
더보기
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
vector<int> R_Trit;
// vector에 리버스 된 3진법 저장
while(n != 0)
{
R_Trit.push_back(n % 3);
n /= 3;
}
// vector의 마지막 요소 값부터 3의 n제곱인 k만큼 곱해서 answer에 저장
int k = 1;
int answer = 0;
while(!R_Trit.empty())
{
answer += k * R_Trit.back();
R_Trit.pop_back();
k *= 3;
}
return answer;
}
'공부 > Code Cata' 카테고리의 다른 글
재귀호출로 배열의 합 검사하기 (0) | 2024.12.30 |
---|---|
비트 AND연산 / std::toupper / std::tolower (0) | 2024.12.30 |
행렬의 덧셈(함수 내 배열 크기와 함께 초기화) (0) | 2024.12.26 |
Quick Sort (0) | 2024.12.23 |
std::sqrt (0) | 2024.12.22 |