문제 : 자연수 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;
}
'알고리즘 > C#' 카테고리의 다른 글
[C#] 문자열 다루기 기본 - 프로그래머스 (0) | 2020.10.14 |
---|---|
[C#] 문자열 내림차순으로 배치하기 - 프로그래머스 (0) | 2020.10.13 |
[C#] 문자열 내 마음대로 정렬하기 - 프로그래머스 (0) | 2020.10.11 |
[C#] 두정수 사이의 합- 프로그래머스 (0) | 2020.10.10 |
[C#] 나누어 떨어지는 숫자 배열 - 프로그래머스 (0) | 2020.10.09 |