10진수를 3진수로 만들고 이를 반전시키고 다시 10진수로 되돌리면 된다.
먼저 코드로는 이렇게 짰다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <math.h> int solution(int num1) { int answer = num1; int ary[20]; int i = 0; while (answer > 1) { ary[i] =answer % 3; answer /= 3; i++; } ary[i] = answer; answer = 0; for (int j = 0; j <= i; j++) { answer += ary[j] * pow(3, i - j); } return answer; } void main() { int num = 100000000; printf("%d, %d\n", num, solution(num)); } | cs |
1억을 넣었을 때 초과되지 않도록 배열 길이는 20으로 해두었다.
Vector를 사용하는 것도 좋지만 다시 반환하기 귀찮아서 그냥 배열로 했다.
뒤집는 기능도 구현 할 필요없이 배열을 큐처럼 사용하여 바로 리턴하면 된다.
예로 45를 입력했을 경우 13번줄 코드에서 배열에 이런식으로 저장되는데
이를 다시 빼와서 3^n 만큼 곱해주면 된다.


댓글 없음:
댓글 쓰기