C#으로 풀기 - 3진법 뒤집기

Amberjack·2024년 3월 8일
0

Codekata

목록 보기
15/16

문제풀이

오늘의 문제는 구글링을 좀 했다. 3진법으로 변환하는 방법을 찾아보았는데, while문을 돌면서 n이 0이 될 때까지 n % 3을 하고, n /= 3을 하는 방법이었다. 아래 코드의 while 구문 안에 있는 것이 바로 10진법을 3진법으로 변환하는 것이다.

아마도 10진법 n을 m진법으로 변경할 때는 아래와 같이 (n % m)을 하고 n /= m을 하면 될듯 하다.

using System;
using System.Collections.Generic;

public class Solution
{
    public int solution(int n)
    {
        int answer = 0;
        List<int> list = new List<int>();

        while (n != 0)
        {
            list.Add(n % 3);
            n /= 3;
        }

        list.Reverse();

        for (int i = 0; i < list.Count; i++)
        {
            answer += (int)(list[i] * Math.Pow(3, i));
        }
        return answer;
    }
}

사실 위의 방법은 내가 푼 방법이 아니다. 나는 while문에서 list에 insert(0, n % 3)을 했는데, 왜 인지 모르겠지만 2개의 케이스에서 오류가 났다. 이해를 할 수가 없었다... 특정 조건에서 insert의 경우는 숫자가 달라지는 것 같다. 왜지?

아무튼, 이후에 다시 3진법을 10진법으로 변환하기 위해 for문을 돌면서 Math.Pow(3, i)를 시켜주었다. Math.Pow(a, b)함수는
a^b를 구해주는 함수이다.

0개의 댓글