1033.連続するまで石を移動する(Python)

1305 ワード

もっと素晴らしい内容は、「力ボタンの簡単な問題」に注目してください.
タイトル
難易度:★☆☆☆タイプ:配列、益智
3枚の石を数軸に置き,位置はそれぞれa,b,cであった.
各ラウンドごとに,この3つの石が現在それぞれ位置x,y,z,x移動ができない場合、すなわち、これらの石の位置が連続している場合、ゲームは終了します.
ゲームを終了させるには、最小移動回数と最大移動回数はそれぞれ何回ですか?長さ2の配列で答えを返します:answer=[minimum_moves,maximum_moves]
ヒント1<=a<=100 1<=b<=100 1<=c<=100 a!=b, b != c, c != a

例1入力:a=1,b=2,c=5出力:[1,2]説明:石を5から4に移動して3に移動するか、直接石を3に移動することができる.
例2入力:a=4,b=3,c=2出力:[0,0]説明:移動はできません.
に答える
参考にして
毎回一番左側か、一番右側の石だけが真ん中に移動します.従ってz−xの値は徐々に収束する.
最大回数は一歩一歩真ん中に移動し、必要なステップ数はz-x-2です.zとxの間を移動できる空間はz−x−1であり,yが占める位置も1つ除去されるため,最終移動の最大ステップ数はz−x−2である.
最小ステップ数は?
最小値0:x,y,zの3つの値自体が隣接している場合、移動せずにゲームが終了します.
最小値は1である:xとyの間に1つの位置しかない場合、zはこの空席に移動し、1回だけ移動しても終了する.
最小値は2です.上記の2つの場合を除いて、xをy-1に移動するか、zをy+1に移動するたびに、2ステップで終了します.
class Solution(object):
    def numMovesStones(self, a, b, c):
        num = sorted([a, b, c])
        mm = num[2]-num[0]-2
        if num[2]-num[1] > 2 and num[1]-num[0] > 2:
            nn = 2
        elif num[2]-num[0] == 2:
            nn = 0
        else:
            nn = 1
        return[nn, mm]

質問やアドバイスがあれば、コメントエリアへようこそ~