function solution(nums, k) {
let sum = 0;
let answer = 0;
for (let i = 0; i < k; i++) {
sum += nums[i];
}
answer = sum;
for (let j = k; j < nums.length; j++) {
sum += nums[j] - nums[j - k];
answer = Math.max(answer, sum);
}
return answer;
}
function solution(nums, k) {
let answer = [];
let obj = new Map();
for (let i = 0; i < k - 1; i++) {
obj.set(nums[i], obj.get(nums[i]) + 1 || 1);
}
let lt = 0;
for (let rt = k - 1; rt < nums.length; rt++) {
obj.set(nums[rt], obj.get(nums[rt]) + 1 || 1);
answer.push(obj.size);
obj.set(nums[lt], obj.get(nums[lt]) - 1);
if (obj.get(nums[lt]) === 0) obj.delete(nums[lt]);
lt++;
}
}
음수가 포함될 시 슬라이딩 기법은 많이 다르게 변형됨
function solution(nums, m) {
let answer = 0;
let lt = 0;
let sum = 0;
for (let rt = 0; rt < nums.length; rt++) {
sum += nums[rt];
if (sum === m) answer++;
while (sum > m) {
sum -= nums[lt++];
if (sum === m) answer++;
}
}
return answer;
}
강사님은 천재...
function solution(nums, m) {
let answer = 0;
let sum = 0;
let hash = new Map();
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
if (sum === m) answer++;
if (hash.has(sum - m)) answer += hash.get(sum - m);
hash.set(sum, hash.get(sum) + 1 || 1);
}
return answer;
}
function solution(nums, m) {
let answer = 0;
let sum = 0;
let lt = 0;
for (let rt = 0; rt < nums.length; rt++) {
sum += nums[rt];
while (sum > m) {
sum -= nums[lt++];
}
answer += rt - lt + 1;
}
return answer;
}
function solution(n) {
let arr = Array.from({ length: parseInt(n / 2) + 1 }, (v, i) => i + 1);
let sum = 0;
let lt = 0;
let answer = 0;
for (let rt = 0; rt < arr.length; rt++) {
sum += arr[rt];
if (sum === n) answer++;
while (sum > n) {
sum -= arr[lt++];
if (sum === n) answer++;
}
}
return answer;
}
function solution(s, t) {
let obj = new Map();
let lt = 0;
let answer = 0;
// Map 생성
for (let x of t) {
obj.set(x, obj.get(x) - 1 || -1);
}
// s에서 t만큼 돌면서 처음 아나그램 비교
for (let i = 0; i < t.length - 1; i++) {
if (obj.get(s[i]) === -1) obj.delete(s[i]);
else obj.set(s[i], obj.get(s[i]) + 1 || 1);
}
for (let rt = t.length - 1; rt < s.length; rt++) {
if (obj.get(s[rt]) === -1) obj.delete(s[rt]);
else obj.set(s[rt], obj.get(s[rt]) + 1 || 1);
if (obj.size === 0) answer++;
if (obj.get(s[lt]) === 1) obj.delete(s[lt]);
else obj.set(s[lt], obj.get(s[lt]) - 1 || -1);
lt++;
}
return answer;
}
function solution(apples, power, m) {
let answer = 0;
let arr = [];
let lt = 0;
let maxAp = 0;
let idx = 0;
for (let i = 0; i < m; i++) {
if (power[i] === 0) maxAp += apples[i];
}
arr.push(maxAp);
for (let rt = m; rt < power.length; rt++) {
if (power[lt] === 0) maxAp -= apples[lt];
if (power[rt] === 0) maxAp += apples[rt];
lt++;
arr.push(maxAp);
}
for (let j = 1; j < arr.length; j++) {
if (arr[idx] < arr[j]) {
idx = j;
}
}
while (m > 0) {
power[idx++] = 1;
m--;
}
for (let l = 0; l < apples.length; l++) {
if (power[l] === 1) {
answer += apples[l];
}
}
return answer;
}