Problem:
Score : 300 points

Problem Statement

To make it difficult to withdraw money, a certain bank allows its customers to withdraw only one of the following amounts in one operation:

1 yen (the currency of Japan)

6 yen, 6^2(=36) yen, 6^3(=216) yen, ...

9 yen, 9^2(=81) yen, 9^3(=729) yen, ...

At least how many operations are required to withdraw exactly N yen in total?

It is not allowed to re-deposit the money you withdrew.

Constraints

1 \leq N \leq 100000

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

If at least x operations are required to withdraw exactly N yen in total, print x.

Sample Input 1

127

Sample Output 1

4

By withdrawing 1 yen, 9 yen, 36(=6^2) yen and 81(=9^2) yen, we can withdraw 127 yen in four operations.

Sample Input 2

3

Sample Output 2

3

By withdrawing 1 yen three times, we can withdraw 3 yen in three operations.

Sample Input 3

44852

Sample Output 3

16

Solution in JavaScript (node.js v5.12) (judge verdict: Wrong Answer)

// inputに入力データ全体が入る
function Main(input) {
//    input = input.split(' ');
    //文字列から10進数に変換するときはparseIntを使います
    var n = parseInt(input, 10);
    var ans = 0;
    
    var one_count = 0;

    var two_count = 0;

    var three_count = 0;
    var three_check = false;

    while (n != 0) {
        if (n % 2 == 0) {
            n /= 2;
            two_count++;
        } else if (n % 3 == 0) {
            n /= 3;
            three_count++;
        } else {
            n--+
            one_count++;
        }
    }

    if (two_count > 0 && three_count > 0) {
        if (two_count < three_count) {
            three_count -= two_count;
            two_count -= two_count;
        } else {
            two_count -= three_count;
            three_count -= three_count;
        }
        ans++;
    }

    while (three_count > 1) {
        three_count -= 2;
        if (!three_check) {
            three_check = true;
            ans++
        }
    }

    if (two_count > 0) {
        n = Math.pow(2, two_count);
        var nine_count = 1;
        var six_count = 1
        var nine_check = false;
        var six_check = false;
        while ( true ) {
            var nine_tmp = n - Math.pow(9, nine_count);
            if (nine_tmp < 0) {
                if (nine_count != 1) {
                    nine_count--;
                    nine_tmp = n - Math.pow(9, nine_count);
                    nine_count = 1;
                    six_check = false;
                } else {
                    nine_tmp = n;
                    nine_check = true;
                }
                while ( true ) {
                    var six_tmp = n - Math.pow(6, six_count);
                    if (six_tmp < 0) {
                        if (six_count != 1) {
                            six_count--;
                            six_tmp = n - Math.pow(6, six_count);
                            six_count = 1;
                            nine_check = false;
                        } else {
                            six_tmp = n;
                            six_check = true;
                        }
                        if (!nine_check || !six_check) {
                           if (nine_tmp < six_tmp) {
                                n = nine_tmp;
                            } else {
                                n = six_tmp;
                            }
                            ans++;
                        }
                        break;
                    } else {
                        six_count++;
                    }
                }
                if (nine_check && six_check) {
                    ans += n;
                    break;
                }
            } else {
                nine_count++;
            }
        }
    } else if (three_count > 0) {
        ans += 3;
    }

    if (one_count >= 6) {
        n = one_count;
        var nine_count = 1;
        var six_count = 1
        var nine_check = false;
        var six_check = false;
        while ( true ) {
            var nine_tmp = n - Math.pow(9, nine_count);
            if (nine_tmp < 0) {
                if (nine_count != 1) {
                    nine_count--;
                    nine_tmp = n - Math.pow(9, nine_count);
                    nine_count = 1;
                    six_check = false;
                } else {
                    nine_tmp = n;
                    nine_check = true;
                }
                while ( true ) {
                    var six_tmp = n - Math.pow(6, six_count);
                    if (six_tmp < 0) {
                        if (six_count != 1) {
                            six_count--;
                            six_tmp = n - Math.pow(6, six_count);
                            six_count = 1;
                            nine_check = false;
                        } else {
                            six_tmp = n;
                            six_check = true;
                        }
                        if (!nine_check || !six_check) {
                           if (nine_tmp < six_tmp) {
                                n = nine_tmp;
                            } else {
                                n = six_tmp;
                            }
                            ans++;
                        }
                        break;
                    } else {
                        six_count++;
                    }
                }
                if (nine_check && six_check) {
                    ans += n;
                    break;
                }
            } else {
                nine_count++;
            }
        }
    }

    ans += one_count;
    console.log(ans);
}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));