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

YH J·2023년 6월 7일
0

프로그래머스

목록 보기
121/168

문제 링크

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

내 풀이

n을 3으로 나눈 나머지를 vec에 담고 n을 3으로 나눈다 ( n -= answer는 필요없다 어차피 n/=3 할때 나머지는 알아서 지워지기 때문)
이렇게 해서 vec에 담긴 숫자는 3진법으로 변환 후 앞 뒤 반전까지 되어있는 상태이므로 이 상태 그대로 사용하면된다.
vec의 뒤쪽부터 1 곱해서 더하고 3 곱해서 더하고 9 곱해서 더하고... 를 반복하면 된다.

내 코드

#include <string>
#include <vector>
#include <cmath>
using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> vec;
    while(n)
    {
        answer = n % 3;
        vec.push_back(answer);
        n -= answer;
        n /= 3;
    }
    answer = 0;
    for(int i = 0; i < vec.size(); i++)
        answer += *(vec.rbegin() + i) * (pow(3,i));
    return answer;
}

다른 사람의 풀이

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    vector<int> v;
    while(n > 0){
        v.push_back(n%3);
        n/=3;
    }
    int k = 1;
    while(!v.empty()) {
        answer += k*v.back();
        v.pop_back();
        k*=3;
    }

    return answer;
}

다른 사람의 풀이 해석

3진법 변환 및 앞 뒤 뒤집는건 같고 3진법을 10진법으로 변환할때 back()과 pop_back()을 활용하였다.

profile
게임 개발자 지망생

0개의 댓글