개발/프로그래머스

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

Dwyw 2022. 11. 28. 00:10

Level1 -

 

 문제

문제 설명

자연수 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 해야 합니다.

 

 풀이

사용언어 : C++

#include <string>
#include <vector>
#include <math.h>
#include <iostream>


using namespace std;

int solution(int n) {
    int answer = 0;
    int tempNum = n;
    vector<int> vecNum;
    
    if ( n == 1){
        return n;
    }
    
    bool loopState = true;
    while (loopState){
        
        vecNum.push_back(tempNum%3);
        tempNum = tempNum/3;
        if ( tempNum < 3){
            vecNum.push_back(tempNum);
            loopState = false;
        }
        
    }
    int count = 0;
    for ( int i = vecNum.size()-1; i >= 0; -- i  ){
        answer += vecNum[count]*(pow(3,i));
        ++count;
    }
    
    return answer;
}

 

다른사람의 풀이

#include <bits/stdc++.h>
using namespace std;

int solution(int n) {
    vector<int> a;
    while (n) {
        a.push_back(n % 3);
        n /= 3;
    }

    int ret = 0;
    for (int i = 0; i < a.size(); ++i) ret = ret * 3 + a[i];
    return ret;
}

 

 

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/68935