GitHubSeob
C++ / 프로그래머스 / 3진법 뒤집기 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/68935
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
문제풀이
3진법은 0, 1, 2로만 이루어진 숫자이다.
원래 n을 3으로 나누고 나머지를 적고, n을 더 이상 나눌 수 없을 때까지 반복한 뒤 나머지를 거꾸로 적어야 하지만 이 문제에서는 3진법 된 수를 뒤집어야 하므로 나머지가 나오는 대로 바로 벡터에 push 하면 된다.
앞뒤가 반전된 3진법이 나오게 되면, 맨 오른쪽 자리부터 왼쪽으로 가면서 해당 자리 숫자 *1, *3, *9, *27,..., 3의 제곱수를 곱해주면 10진법으로 표현된 수가 나온다.
코드
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int>ternary_scale;
while (n > 0) {
ternary_scale.push_back(n % 3);
n /= 3;
}
int mul = 1;
for (int idx = 0; idx < ternary_scale.size(); ++idx) {
answer += (mul * ternary_scale[ternary_scale.size() - idx - 1]);
mul *= 3;
}
return answer;
}
'Programmers > Level 1' 카테고리의 다른 글
C++ / 프로그래머스 / 두 개 뽑아서 더하기 (0) | 2021.08.21 |
---|---|
C++ / 프로그래머스 / 예산 (0) | 2021.08.21 |
C++ / 프로그래머스 / 약수의 개수와 덧셈 (0) | 2021.08.21 |
C++ / 프로그래머스 / 실패율 (0) | 2021.08.21 |
C++ / 프로그래머스 / 폰켓몬 (0) | 2021.08.21 |