From e74dee1e2997c21282666996f1ac4b71d10ce458 Mon Sep 17 00:00:00 2001 From: nkey Date: Tue, 13 Oct 2026 16:03:52 +0900 Subject: [PATCH] =?UTF-8?q?55=20=EC=84=B1=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- repetition/dp/55.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 repetition/dp/55.py diff --git a/repetition/dp/55.py b/repetition/dp/55.py new file mode 100644 index 0000000..0677c2e --- /dev/null +++ b/repetition/dp/55.py @@ -0,0 +1,33 @@ +# Jump Game + +class Solution: + def canJump(self, nums: list[int]) -> bool: + answer = True + max_idx = 0 + now_idx = 0 + if max_idx >= len(nums)-1: + return answer + while now_idx < len(nums) - 1 and now_idx <= max_idx: + max_idx = max(max_idx, now_idx + nums[now_idx]) + if max_idx >= len(nums)-1: + break + now_idx += 1 + else: + answer = False + + return answer + + +""" +걸린 시간: 40분 + +복잡도: while문이지만 많아도 now_idx가 nums를 한번씩 다 확인하면 끝나기 때문에 시간복잡도는 O(n)이다. +변수 3개만 활용하기 때문에 공간복잡도는 O(1)이다. + +해설: i번째에서 포함할 수 있는 미래의 좌표 최대값(max_idx)을 기록해둔 후, 그 최대값이 최종 인덱스를 넘는지 확인하면된다. +순회는 순서대로 하나의 인덱스씩 진행하며, 만약 max_idx를 현재 보는 인덱스가 초과했다면 미래 좌표의 범위가 끊겼다는 이야기이므로 +그 좌표까지 도달하지 못한다는 말이므로 반복을 끝내고 False를 출력한다. +nums의 전체 길이가 1인 경우에는 반복문이 시작하자마자 끝나서 answer가 False가 되므로 예외처리 한다. + +이 예외처리 때문에 과거에 풀었던 풀이가 훨씬 낫다. -> 거꾸로 오면서 최종 인덱스에 도달할 수 있는 이전 인덱스를 갱신하는데 이게 0이 되면 True +""" \ No newline at end of file