|
39 | 39 |
|
40 | 40 | ## 풀이 과정
|
41 | 41 |
|
42 |
| -1. 배열 요소가 1개 인지 체크한다. 배열 요소가 1개면 이미 배열의 끝에 도달했기 때문에 return true 처리 후 로직을 종료한다. |
| 42 | +1. 배열 요소가 1개 인지 체크한다. 배열 요소가 1개면 이미 배열의 끝에 도달했기 때문에 `return true` 처리 후 로직을 종료한다. |
43 | 43 | ```python
|
44 | 44 | if len(nums) == 1:
|
45 | 45 | return True
|
|
50 | 50 | move = nums[0]
|
51 | 51 | ```
|
52 | 52 |
|
53 |
| -3. 현재 이동 가능한 범위가 배열의 크기보다 큰지 체크한다. 해당 조건에 맞으면 바로 배열의 끝으로 이동 가능하므로 return true 처리 후 로직을 종료한다. |
| 53 | +3. 현재 이동 가능한 범위가 배열의 크기보다 큰지 체크한다. 해당 조건에 맞으면 바로 배열의 끝으로 이동 가능하므로 `return true` 처리 후 로직을 종료한다. |
54 | 54 | ```python
|
55 | 55 | if move >= len(nums) - 1:
|
56 | 56 | return True
|
57 | 57 | ```
|
58 | 58 |
|
59 |
| -4. 현재 이동 가능한 범위가 배열의 크기보다 작으면 while 문을 시작한다. |
| 59 | +4. 현재 이동 가능한 범위가 배열의 크기보다 작으면 `while` 문을 시작한다. |
60 | 60 | ```python
|
61 | 61 | while move <= len(nums):
|
62 | 62 | ```
|
63 | 63 |
|
64 | 64 | 5. 현재 위치에서 더 이동할 수 있는지 여부를 체크한다. 더 이동할 수 있다면 `move` 변수를 다시 이동 가능한 범위만큼 이동시킨다.
|
65 | 65 | ```python
|
66 | 66 | if nums[move] == 0:
|
67 |
| - # 더 이동할 수 없는 경우 이전 위치로 돌아가면서 확인 |
| 67 | + # 더 이동할 수 없는 경우 이전 위치로 돌아가면서 확인 |
68 | 68 | else:
|
69 |
| - move += nums[move] |
| 69 | + move += nums[move] |
70 | 70 | ```
|
71 | 71 |
|
72 |
| -6. 현재 위치에서 더 이동할 수 없다면 이전 위치로 돌아가면서 확인하는 로직을 작성한다. `move` 변수를 -1 만큼 이동시키는 for-in 문을 선언하고, 이전 위치에서 현재 위치로 도달 가능한지 여부를 체크하는 조건문을 작성한다. 조건이 참이면 `move` 변수를 진행 가능한 위치로 업데이트한다. for-in 문이 종료되어 더 이상 진행 불가능한 상황이 되면 return false 로 로직을 종료한다. |
| 72 | +6. 현재 위치에서 더 이동할 수 없다면 이전 위치로 돌아가면서 확인하는 로직을 작성한다. `move` 변수를 `-1` 만큼 이동시키며 순회하는 `for-in` 문을 선언하고, 이전 위치에서 현재 위치로 도달 가능한지 여부를 체크하는 조건문을 작성한다. 조건이 참이면 `move` 변수를 진행 가능한 위치로 업데이트한다. `for-in` 문이 종료되어 더 이상 진행 불가능한 상황이 되면 `return false` 로 로직을 종료한다. |
73 | 73 | ```python
|
74 |
| - for i in range(move - 1, -1, -1): |
75 |
| - # 이전 위치에서 현재 위치로 도달 가능한지 확인 |
76 |
| - if i + nums[i] > move: |
77 |
| - # 진행 가능한 위치로 업데이트 |
78 |
| - move = i + nums[i] |
79 |
| - break |
80 |
| - |
| 74 | + for i in range(move - 1, -1, -1): |
| 75 | + # 이전 위치에서 현재 위치로 도달 가능한지 확인 |
| 76 | + if i + nums[i] > move: |
| 77 | + # 진행 가능한 위치로 업데이트 |
| 78 | + move = i + nums[i] |
| 79 | + break |
| 80 | + |
81 | 81 | else:
|
82 | 82 | return False
|
83 | 83 | ```
|
84 | 84 |
|
85 |
| -7. while 문이 종료될 때 까지 배열의 마지막에 도달하지 못한 경우엔 return false 처리 후 로직을 종료한다. |
| 85 | +7. while 문이 종료될 때 까지 배열의 마지막에 도달하지 못한 경우엔 `return false` 처리 후 로직을 종료한다. |
86 | 86 | ```python
|
87 | 87 | return False
|
88 | 88 | ```
|
@@ -137,7 +137,7 @@ class Solution(object):
|
137 | 137 |
|
138 | 138 | ## 1차 수정
|
139 | 139 |
|
140 |
| -1. [1,2,3] 혹은 [1,3,2] 같은 테스트 케이스에서 배열의 중간 요소가 배열의 크기보다 커질 때, while 문 바깥으로 탈출하여 return false 로 처리되었다. 그래서 이동 가능한 범위가 배열의 크기보다 큰지 체크하는 조건문을 while 문 아래로 옮겨서 해당 케이스를 통과할 수 있도록 처리하였다. |
| 140 | +1. `[1,2,3]` 혹은 `[1,3,2]` 같은 테스트 케이스에서 배열의 중간 요소가 배열의 크기보다 커질 때, `while` 문 바깥으로 탈출하여 `return false` 로 처리되었다. 그래서 이동 가능한 범위가 배열의 크기보다 큰지 체크하는 조건문을 `while` 문 아래로 옮겨서 해당 케이스를 통과할 수 있도록 처리하였다. |
141 | 141 | ```python
|
142 | 142 | if move >= len(nums) - 1:
|
143 | 143 | return True
|
@@ -193,8 +193,8 @@ class Solution(object):
|
193 | 193 | ## 시간, 공간 복잡도
|
194 | 194 |
|
195 | 195 | ### 시간 복잡도: `O(n) + O(n)` = `O(n)`
|
196 |
| -- while 문이 len(nums) 만큼 순회하므로 `O(n)` 의 시간 복잡도를 가진다. |
197 |
| -- for-in 문은 현재 위치에서 이전 위치까지의 거리만큼만 반복하면 되므로 `O(n)` 의 시간 복잡도를 가진다. |
| 196 | +- `while` 문이 `len(nums)` 만큼 순회하므로 `O(n)` 의 시간 복잡도를 가진다. |
| 197 | +- `for-in` 문은 현재 위치에서 이전 위치까지의 거리만큼만 반복하면 되므로 `O(n)` 의 시간 복잡도를 가진다. |
198 | 198 |
|
199 | 199 | ### 공간 복잡도: `O(1)`
|
200 | 200 | - 주어진 배열 `nums` 에서 계산 및 수정 작업을 수행하므로 `O(1)` 의 공간 복잡도를 가진다.
|
|
0 commit comments