문제 설명
자연수 n이 매개변수로 주어집니다.
n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n | result |
45 | 7 |
125 | 229 |
입출력 예 설명
입출력 예 #1
- 답을 도출하는 과정은 다음과 같습니다.
n(10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
45 | 1200 | 0021 | 7 |
- 따라서 7을 return 해야 합니다.
입출력 예 #2
- 답을 도출하는 과정은 다음과 같습니다.
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
125 | 11122 | 22111 | 229 |
- 따라서 229를 return 해야 합니다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> tri;
while(n) {
tri.push_back(n % 3);
n /= 3;
}
int multiply = 1;
for(int i=tri.size()-1; i>=0; i--) {
answer += tri[i] * multiply;
multiply *= 3;
}
return answer;
}
일단 tri 벡터를 만들어준다.
tri 벡터는 10진수를 3진수로 변환해서 거꾸로 넣어주는 벡터이다.
그리고 3진수를 다시 10진수로 변환할때 끝에서부터 3의 i제곱을 곱해주어 result에 더해주어야 한다.
여기서 i는 3의 0제곱(1), 3, 3의 2제곱(2)... 순으로 증가하기 때문에,
multiply라는 변수를 3의 0제곱(1)로 초기화해주어서 반복문을 돌때마다 3을 곱해준다.
그리고 tri벡터의 끝의 요소부터 반대로 multiply변수와 곱해주어 answer에 더해준다.
'PS > Programmers' 카테고리의 다른 글
Programmers / Level 1 / 최소직사각형 / C++ (0) | 2021.11.13 |
---|---|
Programmers / Level 1 / 예산 / C++ (0) | 2021.11.12 |
Programmers / Level 2 / 오픈채팅방 / C++ (0) | 2021.11.10 |
Programmers / Level 1 / 실패율 / C++ / JS (0) | 2021.11.08 |