문제:

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

문제설명: 3진법 수를 뒤집어 10진법으로 표현

 

로직: 벡터를 이용해서 n의 3진수를 담는다.
for 이용해서 벡터 맨뒤에서부터 맨앞까지 ( 자릿수 - 1 ) 만큼 3의 제곱승하여 남은 n값에 곱해준다.

#include<bits/stdc++.h>
using namespace std;
/*
* 로직: 벡터를 이용해서 n의 3진수를 담는다.
* for 이용해서 벡터 맨뒤에서부터 맨앞까지 ( 자릿수 - 1 ) 만큼 3의 제곱승하여 남은 n값에 곱해준다.
*/
int solution(int n) {
    int answer = 0;
    vector<long long>vt; // n의 3진수(0, 1, 2)를 담을 vector선언
    int mod = 3; // %3
    while (n>= 3) { // n이 3이상인 한해서.
        int val = n % mod; // modular연산하여 3진수 계산
        n = n / mod; // 갱신
        vt.push_back(val);
    }
    n = n % mod; // 2이하인 값 mod계산
    vt.push_back(n);
    for (int x = vt.size() - 1; x >= 0; --x) {
        int ten = 1;
        for (int squared = 1; squared < vt.size() - x ; ++squared) {
            ten *= mod; // 3의 n승을 통해 10진수로 만듦.
        }
        answer += vt[x] *ten;
    }

    return answer;
}
int main(void) {
    cout<<solution(45);
}

'PS > 프로그래머스' 카테고리의 다른 글

네트워크(V)  (0) 2023.08.11
타겟 넘버  (0) 2023.08.10
[카카오 인턴] 키패드 누르기 [V]  (0) 2023.07.29
달리기 경주(O)  (0) 2023.07.28
연속된 부분 수열의 합(V)  (0) 2023.07.22

+ Recent posts