반응형
공통 원소
A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력
function solution(a, b) {
let answer;
// code here;
return answer;
}
let a = [1, 3, 9, 5, 2];
let b = [3, 2, 5, 7, 8];
console.log(solution(a, b)); // [2,3,5]
답) 중복을 허용하지 않는 Set()
을 이용
function solution(a, b) {
let answer = [];
let mySet = new Set(a);
for(let el of b) {
mySet.has(el) ? answer.push(el) : null;
}
return answer.sort((a, b) => a - b);
}
답2) 두 배열을 오름차순으로 정렬한 뒤, 각 원소를 돌면서 중복된 원소를 담아주기
function solution(a, b) {
let answer = [];
let flagA = flagB = 0;
a.sort((c, d) => c - d); // sort()는 mutable
b.sort((c, d) => c - d);
while(flagA < a.length && flagB < b.length) {
if(a[flagA] === b[flagB]) {
answer.push(a[flagA++]);
flagB++;
} else {
a[flagA] < b[flagB] flagA++ : flagB++;
}
}
return answer;
}
연속 부분수열 1
수열이 주어질 때, 연속한 원소의 합이 타겟한 숫자와 같은 경우의 수는?
function solution(num, arr) {
let answer;
// code here;
return answer;
}
let a = [1, 2, 1, 3, 1, 1, 1, 2];
console.log(solution(6, a)); // 3
답) two pointer algorithm
function solution(num, arr) {
let answer = 0;
for(let i = 0; i < arr.length; i++) {
let sum = arr[i];
let idx = i + 1;
if(sum === num) {
answer++;
};
while (num > sum) {
sum += arr[idx++];
if(sum === num) {
answer ++;
};
}
};
return answer;
}
연속 부분수열 2
수열이 주어질 때, 연속한 원소의 합이 타겟보다 작은 경우의 수는?
function solution(num, arr) {
let answer;
// code here;
return answer;
}
let a = [1, 3, 1, 2, 3];
console.log(solution(5, a)); // 10
답) two pointer algorithm
function solution(num, arr) {
let answer = 0;
for(let i = 0; i < arr.length; i++) {
let sum = 0;
let idx = i;
while(sum <= num) {
sum = arr[idx++];
if(sum === num) answer++;
};
};
return answer;
}
k일 연속의 최대 합
매출의 배열이 주어질 때, k 일 연속의 합 중에서 최대값은?
function solution(num, arr) {
let answer;
// code here;
return answer;
}
let a = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15];
console.log(solution(3, a)); //56
답) two pointer algorithm
function solution (num, arr) {
let answer = 0;
for(let i = 0; i < arr.length - 2; i++) {
let sum = arr[i];
let cnt = i + 1;
while(cnt - i < num) {
sum += arr[cnt++];
}
answer = Math.max(sum, answer);
};
return answer;
}
답2) sliding door algorithm
3
일 째 연속의 최대 합을 구할 때, 매출의 배열 [12, 15, 11, 20, 25, ... 생략]
이다.
- sum = 12 + 15 + 11
- sum = (sum + 20) - 12
- sum = (sum + 25) - 20
- 반복
function solution(num, arr) {
let answer = sum = 0;
for(let i = 0; i < num; i++) {
sum += arr[i]
};
answer = sum;
for(let i = k; i < arr.length; i++) {
sum += (arr[k] - arr[i - k]);
answer = Math.max(sum, answer);
}
return answer;
}
반응형
'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글
2021.8.10 TIL 괄호 여닫힘 문제 _ 스택 알고리즘 (0) | 2021.08.10 |
---|---|
2021.8.8 TIL 학급회장, 아나그램 (해쉬, 투포인터, 슬라이더) (0) | 2021.08.08 |
2021.8.6 TIL 졸업선물,k번째합,두 배열 합치기 (0) | 2021.08.07 |
2021.8.4 TIL 자리수의 합, 뒤집은 소수, 멘토링 경우의 수 (0) | 2021.08.04 |
2021.8.3 TIL 문자거리, 문자열 압축 (0) | 2021.08.03 |
댓글