PS/프로그래머스
3진법 뒤집기
MQTT
2023. 7. 29. 18:50
문제:
https://school.programmers.co.kr/learn/courses/30/lessons/68935#
문제설명: 3진법 수를 뒤집어 10진법으로 표현
로직: 벡터를 이용해서 n의 3진수를 담는다.
for 이용해서 벡터 맨뒤에서부터 맨앞까지 ( 자릿수 - 1 ) 만큼 3의 제곱승하여 남은 n값에 곱해준다.
#include<bits/stdc++.h>
using namespace std;
/*
* 로직: 벡터를 이용해서 n의 3진수를 담는다.
* for 이용해서 벡터 맨뒤에서부터 맨앞까지 ( 자릿수 - 1 ) 만큼 3의 제곱승하여 남은 n값에 곱해준다.
*/
int solution(int n) {
int answer = 0;
vector<long long>vt; // n의 3진수(0, 1, 2)를 담을 vector선언
int mod = 3; // %3
while (n>= 3) { // n이 3이상인 한해서.
int val = n % mod; // modular연산하여 3진수 계산
n = n / mod; // 갱신
vt.push_back(val);
}
n = n % mod; // 2이하인 값 mod계산
vt.push_back(n);
for (int x = vt.size() - 1; x >= 0; --x) {
int ten = 1;
for (int squared = 1; squared < vt.size() - x ; ++squared) {
ten *= mod; // 3의 n승을 통해 10진수로 만듦.
}
answer += vt[x] *ten;
}
return answer;
}
int main(void) {
cout<<solution(45);
}