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

2021. 3. 2. 16:19필요/코딩테스트(프로그래머스)

문제

programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

풀이

#include <stack>
#include <vector>

using namespace std;

int solution(int n) {
    stack<int> s;
    while (n/3 != 0) {	// 3진수로 변환
        s.push(n%3);
        n/=3;
    }
    s.push(n);
    int answer = 0;
    int r = 1;
    while (!s.empty()) {	// 반전과 동시에 십진수로 변환
        int m = s.top();
        s.pop();
        answer+=m*r;
        r*=3;
    }
    return answer;
}

개념

stack의 성질인 FILO을 활용했다.


풀이

일단 십진수 n을 삼진수로 변환한다.

삼진수의 첫번째 값은 나머지 값이 아니므로, 반복문 밖에서 따로 취급한다.

 

각 삼진수의 요소들을 스택에 넣었다가 빼면, 반전이 이뤄진다.

그 요소를 가지고 삼진수 -> 십진수로 변환한다.

 

※string을 사용한 풀이도 생각이 되나, 좀 더 번거로울 것 같다.