Skip to content

Commit 588917f

Browse files
Merge pull request #1790 from CodingTestStudy2/황은지
[황은지] Day11
2 parents 953e3f7 + 22b3720 commit 588917f

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* @param {number[]} boxes
3+
* @return {number}
4+
*/
5+
var removeBoxes = function(boxes) {
6+
const stack=[];
7+
// 괄호 스택문자랑 비슷한 느낌이지만, 괄호랑 다르게 쌍이 없음..=> 어떻게 푸는지 잘모르겠다..
8+
9+
// 찾아보니 dp로 해야된다.. 메모이제이션 때문에 3차원이 좋다.
10+
11+
// const n = boxes.length;
12+
// if (n === 0) return 0;
13+
14+
// // 3차원 메모이제이션 배열 생성 (n x n x n)
15+
// // 계산되지 않은 상태는 0으로 초기화합니다.
16+
// const memo = new Array(n).fill(0).map(() =>
17+
// new Array(n).fill(0).map(() =>
18+
// new Array(n).fill(0)
19+
// )
20+
// );
21+
22+
// function dp(l, r, k) {
23+
// // 구간이 교차하면 0 반환
24+
// if (l > r) return 0;
25+
26+
// // 최적화: 오른쪽 끝에 연속된 같은 색깔의 박스가 있으면 묶어서 처리
27+
// // 예: [..., 3, 3] 이라면 r을 하나 줄이고 대기 중인 k를 늘림
28+
// while (l < r && boxes[r] === boxes[r - 1]) {
29+
// r--;
30+
// k++;
31+
// }
32+
33+
// // 이미 계산된 값이 있다면 바로 반환 (캐싱)
34+
// if (memo[l][r][k] > 0) {
35+
// return memo[l][r][k];
36+
// }
37+
38+
// // 선택 A: 오른쪽 끝에 있는 박스와 대기 중인 k개의 박스를 바로 터뜨림
39+
// let res = dp(l, r - 1, 0) + (k + 1) * (k + 1);
40+
41+
// // 선택 B: l과 r-1 사이에서 boxes[r]과 같은 색깔을 찾아 중간 부분을 먼저 터뜨림
42+
// for (let i = l; i < r; i++) {
43+
// if (boxes[i] === boxes[r]) {
44+
// // dp(i + 1, r - 1, 0): 중간에 끼어있는 다른 색깔들을 먼저 터뜨림
45+
// // dp(l, i, k + 1): 왼쪽 남은 부분과 오른쪽의 박스들을 연결해서 마저 풂
46+
// res = Math.max(res, dp(i + 1, r - 1, 0) + dp(l, i, k + 1));
47+
// }
48+
// }
49+
50+
// // 계산 결과를 기록하고 반환
51+
// memo[l][r][k] = res;
52+
// return res;
53+
// }
54+
55+
// // 처음부터 끝까지, 뒤에 대기 중인 박스는 0개인 상태로 시작
56+
// return dp(0, n - 1, 0);
57+
};

0 commit comments

Comments
 (0)