오늘의 문제는 구글링을 좀 했다. 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를 구해주는 함수이다.