strt's blog

🗒🔨🙍

LeetCode を解いた(455. Assign Cookies)

2024/03/27

言語は Python3 でやってます。

問題

https://leetcode.com/problems/assign-cookies/description/

子供を表したリストと、クッキーを表したリストの 2 つが渡される。 子供は、リストの長さが子供の人数を表していて、各数値が「満足する最低のクッキーのサイズ」を表している。 クッキーは、リストの長さがクッキーの数を表していて、各数値がクッキーのサイズを表している。

手持ちのクッキーで、満足させられる子供の最大数を求める問題。

解答 ①

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()
        cookie = 0
        child = 0
        cursor_cookie = 0
        cursor_child = 0
        while cursor_cookie < len(s) and cursor_child < len(g):
            child = g[cursor_child]
            cookie = s[cursor_cookie]
            if child <= cookie:
                cursor_child += 1
                cursor_cookie += 1
            if child > cookie:
                cursor_cookie += 1

        return cursor_child

以下のとおりに動く ① クッキーと子供の数をそれぞれソートして、小さい順にする ② クッキーと子供を比較して、子供が満足できる(子供 <= クッキー)の場合は、次の子供とクッキーを見にいく(カーソルを進める) ③ 子供が満足できない場合、クッキーだけ次を見にいく(カーソルを進める) ④ 子供がいなくなるかクッキーがなくなるまで繰り返して、最終的に子供のカーソルがどれだけ進んだか(何人満足したか)を見にいく

ChatGPT にレビューしてもらったところ、特に問題なさそうだったので、整形したのが以下。

解答 ②

class Solution:
    def findContentChildren(self, g: List[int], s: List[int]) -> int:
        g.sort()
        s.sort()
        cursor_cookie = 0
        cursor_child = 0
        while cursor_cookie < len(s) and cursor_child < len(g):
            if g[cursor_child] <= s[cursor_cookie]:
                cursor_child += 1
            cursor_cookie += 1

        return cursor_child

思ったこと

最初からアプローチには問題なかったので、少しずつ効率的な解法が思いつくようになってきた気がする。