You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
계속해서 연속된 수를 제거할 수 있고 제거한 개수의 제곱의 점수를 얻을 수 있다. 최대로 얻는 점수를 구하는 문제.
Solution
하드 중에서도 하드한 문제.
다른 사람의 풀이를 보고 풀긴 하였다.
일단 결론부터 말하면 3차원 DP 문제.
연속된 개수가 중요하므로 3차원으로 해야한다.
dp[i][j][k] = i 부터 j 까지의 최대 점수, k는 i와 같은 지금까지의 연속된 개수.
예제를 보면 알겠지만 1,3,2,2,2,3 에서 3을 앞에서 없애버리면 최대 점수가 되지 못한다. 222를 제거 후 33을 제거해야 하는데 이런 처리를 위해 k가 필요하다.
문제 난이도에 비해 코드는 간단한 편.
Source Code
fromfunctoolsimportlru_cachefromtypingimportListclassSolution:
defremoveBoxes(self, boxes: List[int]) ->int:
@lru_cache(None)defsolve(left: int, right: int, k: int):
ifleft>right:
return0# k 를 그냥 사용ret= (k+1) * (k+1) +solve(left+1, right, 0)
foriinrange(left+1, right+1):
# i 까지 점수 계산, 그 뒤에 나온거로 합쳐서 계산 ifboxes[i] ==boxes[left]:
ret=max(ret, solve(left+1, i-1, 0) +solve(i, right, k+1))
returnretreturnsolve(0, len(boxes) -1, 0)
This discussion was converted from issue #25 on September 15, 2026 10:59.
Heading
Bold
Italic
Quote
Code
Link
Numbered list
Unordered list
Task list
Attach files
Mention
Reference
Menu
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Problem link
https://leetcode.com/problems/remove-boxes/
Problem Summary
계속해서 연속된 수를 제거할 수 있고 제거한 개수의 제곱의 점수를 얻을 수 있다. 최대로 얻는 점수를 구하는 문제.
Solution
하드 중에서도 하드한 문제.
다른 사람의 풀이를 보고 풀긴 하였다.
일단 결론부터 말하면 3차원 DP 문제.
연속된 개수가 중요하므로 3차원으로 해야한다.
dp[i][j][k] = i 부터 j 까지의 최대 점수, k는 i와 같은 지금까지의 연속된 개수.
예제를 보면 알겠지만
1,3,2,2,2,3에서 3을 앞에서 없애버리면 최대 점수가 되지 못한다. 222를 제거 후 33을 제거해야 하는데 이런 처리를 위해 k가 필요하다.문제 난이도에 비해 코드는 간단한 편.
Source Code
All reactions