프로그래머스/lv1

프로그래머스 : 월간 코드 챌린지 시즌1 > 3진법 뒤집기(lv1)

TIN9 2023. 4. 10.
반응형

프로그래머스 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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


제한사항
  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예 | n | result
45 7
125 229

코드1(String)

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int n) {
    int answer = 0;

    string str;

    while (n > 0)
    {
        int Remainder = n % 3;
        str += to_string(Remainder);
        n /= 3;
    }

    answer = stoi(str, nullptr, 3);

    return answer;
}

정확성

코드2(vector)

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    vector<int> vec;
    
    // 3진법 변환
    while(n > 0)
    {
        vec.push_back(n % 3);
        n /= 3;
    }
    
    // 리버스 하여 반전되지 않은 3진법으로 변경
    reverse(vec.begin(), vec.end());
    
    size_t Size = vec.size();
    
    // 0번 인덱스 값은 더해줌
    answer += vec[0];
    
    // 1번 인덱스부터 10진수 변환값 Add
    for(size_t i = 1; i < Size; ++i)
    {
        answer += pow(3, i) * vec[i];
    }
    
    return answer;
}

정확성


이번 문제는 벡터와 스트링을 이용해서 두 가지 방식으로 풀어보았다.

스트링을 사용해서 stoi함수를 활용해서 하면 매우 쉽게 변환이 가능하다

vector의 경우 변환 그대로 풀이해봤다.

 

반응형

댓글