Skip to content

Commit 485aa58

Browse files
committed
Discount event / 심화
1 parent 15b826b commit 485aa58

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// 방법 1: 매번 slice로 새 배열과 객체를 생성
2+
function solution1(want, number, discount) {
3+
let answer = 0
4+
const map = want.reduce((map, name, idx) => {
5+
map[name] = number[idx]
6+
return map
7+
}, {})
8+
9+
const check = (sale) => {
10+
for (let item in map) {
11+
if (map[item] !== sale[item]) return false
12+
}
13+
return true
14+
}
15+
16+
for (let i = 0; i <= discount.length - 10; i++) {
17+
const sliced = discount.slice(i, i + 10)
18+
const sale = sliced.reduce((map, name) => {
19+
map[name] = (map[name] || 0) + 1
20+
return map
21+
}, {})
22+
23+
if (check(sale)) answer++
24+
}
25+
26+
return answer
27+
}
28+
29+
// 방법 2: 슬라이딩 윈도우
30+
function solution2(want, number, discount) {
31+
const need = want.reduce((obj, name, idx) => {
32+
obj[name] = number[idx]
33+
return obj
34+
}, {})
35+
36+
// 초기 윈도우(첫 10일) 설정
37+
const sale = {}
38+
for (let i = 0; i < 10; i++) {
39+
sale[discount[i]] = (sale[discount[i]] || 0) + 1
40+
}
41+
42+
const check = () => {
43+
for (let item in need) {
44+
if (need[item] !== sale[item]) return false
45+
}
46+
return true
47+
}
48+
49+
let answer = check() ? 1 : 0
50+
51+
// 슬라이딩 윈도우 이동
52+
for (let i = 10; i < discount.length; i++) {
53+
sale[discount[i]] = (sale[discount[i]] || 0) + 1 // 새로운 것 추가
54+
sale[discount[i - 10]]-- // 이전 것 제거
55+
56+
if (check()) answer++
57+
}
58+
59+
return answer
60+
}

0 commit comments

Comments
 (0)