제주 탈출 일지

[C++] 프로그래머스 레벨 1 - 3진법 뒤집기 본문

코딩 테스트

[C++] 프로그래머스 레벨 1 - 3진법 뒤집기

귀건 2020. 10. 27. 21:56
728x90
반응형

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

 

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

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

programmers.co.kr

10진법 수를 3진법으로 바꾸고, 1200이라면 0021으로 바꾼뒤 다시 10진법으로 변환하는 문제. 

여러방법이 있겠지만 그냥 일반적으로 변환하는 방법처럼 나눈뒤 나머지를 모아서 vector에 담은 뒤 reverse_iteratot를 사용하여 반대로 더해나갔다. 이 과정에서 pow(제곱)함수를 사용했다.

어려운 문제가 아니니 쉽게 풀 수 있을 것이다.

 

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

using namespace std;

int solution(int n) {
    int answer = 0;
    
    vector<int> three;
    int tmp = n;
    
    for(;tmp != 0;){
        //45 1 2 0 0
        three.push_back(tmp%3);
        tmp /= 3;
    }
    vector<int>::reverse_iterator iter;
    int i = 0;
    for(iter = three.rbegin(); iter != three.rend(); ++iter){
        answer += *iter * pow(3,i);
        i++;
    }
    
    return answer;
}
728x90
반응형
Comments