📑

【Python】コーディング練習

2023/05/14に公開

はじめに

コーディング練習1日目です。

コーディング内容

リスト内の数字の中で、値の大きなもの2つの差をリストに追加していき、使用した値の大きなもの2つはリストから除外する。
この処理を繰り返していき、最後にリストに残った値を出力する。

実装

sample.py
# 関数内で型明示する
from typing import List

class Solution:
    def lastStoneWeight(self, stones: List[int]) -> int:
        def remove_largest():
            # リストの最大値が入っているインデックス番号を取り出す。
            index_of_largest = stones.index(max(stones))
            # 一番重い石が取り除かれるように、順番を入れ替える。
            stones[index_of_largest], stones[-1] = stones[-1], stones[index_of_largest]
            # 引数を指定しない場合、リストの最後の値が取り除かれる。
            return stones.pop()

        while len(stones) > 1:
            stone1 = remove_largest()
            stone2 = remove_largest()
            # もし上位2つの重さの石の差が異なるなら、
            if stone1 != stone2:
                # その差をリストに加える。
                stones.append(stone1 - stone2)

        # リストに残った最後の要素を返す
        return stones[0] if stones else 0

# テスト
if __name__ == "__main__":
    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11]
    print(Solution().lastStoneWeight(list1))

ポイント

# リストの用意
stones = [1,2,3,4,5,6,7,8,9,12,10]

# 対象の数字が入っているインデックス番号を返す。
stones.index(12)
# 出力:9

# インデックス番号を指定しなければ、最後の要素が取り除かれる。
stones.pop()
# 出力:10

# もしリスト(stones)があるなら1を、それ以外の場合は0を返す。(結果、条件式の書き方)
stones[0] if stones else 0

参考

https://leetcode.com/problems/last-stone-weight/

Discussion