- μ²μμλ Jump Gameμμ νμλ λ°©μμ μ΄μ©νμ¬ μλνμμΌλ μ€ν¨νλ€.
- μ΅λλ‘ μ ν κ°λ₯ν κΈΈμ΄
maxJump
λ₯Ό ꡬνκ³ - λ§μ½μ νμ¬ μ ν κΈΈμ΄κ°
maxJump
λ³΄λ€ ν¬λ©΄ κ°μ κ΅μ²΄ + μ νν νμ jumpCount
λ₯Ό μ¦κ°μν¨λ€. - μ΄λ κ² νλ©΄ λλ¬ κ°λ₯ν κ²½μ°μ μμ λν
jumpCount
λ₯Ό ꡬν μ μμ§λ§ μ΅μ μ ν νμκ° μλ κ²½μ°κ° μκΈΈ μ μλ€. - μ:
[7,100,1]
μ κ²½μ° ν λ²μ μ ν κ°λ₯νμ§λ§ μμ λ‘μ§μ μνλ©΄ μ νν νμκ° 2νκ° λλ€.
- λλ²μ§Έ μλμμλ μλμ κ°μ λ°©λ²μ μ¬μ©νλ€.
- (1) νμ¬ μμΉ
currPos
λ₯Ό λ§μ§λ§ μμΉ nums.size() - 1
λ‘ μ§μ νλ€. - (2)
currPos
μ λλ¬ κ°λ₯ν κ°μ₯ λ¨Ό μμΉ nextPos
λ₯Ό μ°Ύλλ€. currPos - 1
λΆν° μμμΌλ‘ μ°Ύλλ€.- μ νμ κΈΈμ΄
nums[pos]
κ° νμ¬ μμΉκΉμ§μ 거리 currPos - pos
λ³΄λ€ μ»€μΌ νλ€.
- (3)
nextPos
λ₯Ό μ°Ύμλ€λ©΄ μ ν νμ jumpCount
λ₯Ό μ¦κ°μν€κ³ νμ¬ μμΉλ₯Ό λ€μ μμΉλ‘ μ΄λμν¨λ€ currPos = nextPos
. - (4) μμμ
0
μ λλ¬ν λ κΉμ§ (2)~(3)μ λ°λ³΅νλ€.
- λ§μ½μ arrayμ κΈΈμ΄κ° μ§§μλ€λ©΄ BFS + memoizationμ μ¬μ©ν΄μ νμμ κ² κ°λ€.
class Solution {
public:
int jump(vector<int>& nums) {
int jumpCount = 0;
int currPos = nums.size() - 1;
while (currPos > 0) {
int nextPos = -1;
for (int pos = currPos - 1; pos >= 0; --pos) {
if (nums[pos] >= currPos - pos) {
nextPos = pos;
}
}
if (nextPos == -1) return -1;
currPos = nextPos;
++jumpCount;
}
return jumpCount;
}
};