[프로그래머스 / C++] 3진법 뒤집기

YH·2023년 12월 17일
0

문제

3진법 뒤집기 : 문제 링크


문제 분석

  • 자연수 n이 매개변수로 주어진다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성
  • 제한 사항
    • n은 1이상, 100,000,000이하인 자연수이다.
  • 제곱을 계산하기 위해 pow() 함수를 사용할 것 이므로 cmath 헤더를 include. 연산 수행을 통해 값을 저장할 정수형 변수 answer과 제곱 횟수를 저장할 정수형 변수 sqr을 각각 0으로 초기화. n을 3진수로 변환한 수를 저장할 정수형 벡터 three를 초기화. while loop의 조건문을 n으로 설정하여 자연수인동안 반복하고, n을 3으로 나눈 나머지를 three에 저장후, n 자신을 3으로 나눈몫을 저장. loop 탈출 후, for loop를 사용하여 three의 가장 마지막 원소부터 첫번째 원소까지 순환. 해당 인덱스의 수에 3의 제곱을 곱한값(pow() 함수를 사용)을 answer에 저장하고, loop 반복시 마다 sqr을 1씩 늘려서 제곱횟수를 늘림. loop 탈출 후, 최종적으로 저장된 answer을 return

pow() 함수 사용법
pow(제곱할 수, 제곱횟수) = 제곱할 수 ^ 제곱횟수


풀이

#include <vector>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0, sqr = 0;
    vector<int> three;
    
    while(n) {
        three.push_back(n % 3);
        n /= 3;
    }
    for(int i = three.size() - 1; 0 <= i; --i) {
        answer += three[i] * pow(3, sqr);
        sqr++;
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글