Programmers Coding Quiz#273反転


問題の説明
パラメータは自然数nを与える.nを三進法で前後に逆さまにし、それを十進法で表す数で返し、解関数を完成させる.
せいげんじょうけん
  • nは1000000を超える自然数である.
  • I/O例
    nresult457125229
    I/O例説明
    答えは次のとおりです.
  • n(10進):45
  • n(バイナリ):1200
  • 前後反転(バイナリ):0021
  • 十進法で表す:7
  • したがって7は
    に答える
    # 첫 번째 방법(재귀함수사용)
    def ternary(n, result):
        a = divmod(n, 3)
        if a[0] == 1 or a[0] == 2:
            result = result + str(a[1]) + str(a[0]) 
            return result
        else:
            result = result + str(a[1]) 
            return ternary(a[0], result)
            
    def solution(n):
    	return int(ternary(n, ''), 3)
    
    # 두 번째 방법(while문 사용)
    def solution(n):
        result, number = '', n
        while True :
            a = divmod(number, 3)
            if a[0] == 1 or a[0] == 2:
                result = result + f'{a[1]}' +  f'{a[0]}'
                break
            else:
                result = result + f'{a[1]}'
            number = a[0]
        return int(result, 3)
  • の2つの方法パターンの実施形態は類似している.逆シーケンスを実行する必要はなく、残りの部分を後ろに貼り付け、最後にintを使用してバイナリ文字列を10進数に変換します.
  • 私の方法は、実際のプログラマーに適用すると、テストコードごとに実行時エラー/タイムアウトが発生します.耳が深くなって、whileドアが長すぎて、この2つの中の1つは、実は私はよく分かりません.
  • 別の解釈
    def solution(n):
        tmp = ''
        while n:
            tmp += str(n % 3)
            n = n // 3
    
        answer = int(tmp, 3)
        return answer
    簡単な思考はいつも難しい.
    結論として,解題方式は似ているが,文処理は非常に直感的である.
    divmodは使いませんがもっときれいです