문제풀이(Problem Solving)

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

게임이 더 좋아 2021. 11. 10. 15:06
반응형
728x170

우리가 쉽게 하는 n진법 변환을

컴퓨터로 어떻게 표현할까?

생각하면 된다.

역순인 이유도 있었다.

https://programmers.co.kr/learn/courses/30/lessons/68935?language=cpp 

 


 

배운 점

스택으로도 넣어서 꺼내쓸 수 있지만 나는

string으로 연습해봤다.

 


 

#맞는 풀이

#include <string>
#include <vector>
#include <cmath>
#include <iostream>

using namespace std;

//n은 1억 이하인 자연수
//3진수 만드는법 3으로 나누면서 몫과 나머지 조사.

int solution(int n) {
    int answer = 0;
    int div = 0; //몫
    int res = 0; //나머지
    string s = "";
    div = n; // 초기값.
    
    while(div>=3){
        res = div%3;
        div = div/3;
        s += to_string(res);
    }
    s += to_string(div);
    //s는 역순으로 정렬한 것과 동일
    //이것을 정방향으로 보고 계산
    
    int size = s.size();
    size--; //0부터 n-1까지
    for(auto x : s){
        int n = x - '0';
        
        answer += n * pow(3,size--);
    }
    
    return answer;
}

 

 

#다른 사람 풀이

Vector의 Push_back()으로 나처럼 문자열 객체 뒤에 그냥 +연산한 것과 마찬가지다.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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;
}
728x90
반응형
그리드형