알고리즘/C#

[C#] 3진법 뒤집기 - 프로그래머스

야아옹 2020. 10. 12. 18:13

문제 : 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하시오!

 

제한사항 : 

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

 

풀이 : 10진법을 3진법으로 나타내고 이를 뒤집어야 하는 상황에 10진법으로 다시 바꿔라....라고 해서

        뒤집는 부분의 시간을 줄이면 어떨까라는 생각에 Stack 을 사용하기로 하였다!

        10진법을 3진법으로 나누면서 Stack 에 쌓고 몫이 0이 되었을 시 Stack 에서 하나씩 꺼내와 10진법으로 변환!

public static int solution(int n)
{
    int answer = 0;
    int division;
    int lastValue;

    Stack<int> s = new Stack<int>();

    while (true)
    {
        division = n / 3;
        lastValue = n % 3;
        s.Push(lastValue);
        n = division;
        if (division == 0) break;
    }

    int s_lenght = s.Count;

    for (int i = 0; i < s_lenght; i++)
        answer += (int)(s.Pop() * Math.Pow(3, i));

    return answer;
}