Min:D's Devlog

[프로그래머스][월간 코드 챌린지 시즌 1][C++] 3진법 뒤집기 본문

알고리즘/프로그래머스

[프로그래머스][월간 코드 챌린지 시즌 1][C++] 3진법 뒤집기

Min:D 2020. 11. 16. 22:30

문제

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

 

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

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

programmers.co.kr

 


문제 풀이

접근 방식

이 문제는 프로그래머스 월간 코드 챌린지 시즌 1 (10월)의 1번 문제로,

주어진 숫자 n을 3진법으로 바꿔 표현하고, 이를 뒤집은 숫자를 다시 10진법으로 표현하는 문제였다.

 

우선, n을 3진법으로 표현하기 위해 while문을 통해

result 벡터에 n을 3으로 나눈 나머지를 저장해주었다.

이는 n을 3으로 계속 나눠 n이 0이 될 때까지 수행해주었다.

while (n != 0) {
	result.push_back(n % 3);
	n /= 3;
	len++;
}

 

이렇게 3진법으로 표현한 숫자를 뒤집어서 10진법으로 표현하기 위해

result 벡터의 맨 뒤의 숫자(result[i])에서부터 3의 (len - i - 1) 제곱을 곱하여 더해주어 최종적인 답을 구해주었다.

for (int i = len - 1; i >= 0; i--) {
	answer += result[i] * pow(3, len - i - 1);
}

 

 


풀이 코드 - C++

#include <vector>
#include <cmath>

using namespace std;

int solution(int n) {
    vector<int> result;
    int answer = 0;
    int len = 0;
    while (n != 0) {
        result.push_back(n % 3);
        n /= 3;
        len++;
    }
    for (int i = len - 1; i >= 0; i--) {
        answer += result[i] * pow(3, len - i - 1);
    }
    return answer;
}

실행 결과

Comments