알면 간단히 풀릴 만한 문제들
부분 구간 합의 최대값 구하기
for (let i = 1; i < A.length ; i++) {
// [3,2,-6,4,0,2]
// 2와 3 + 2 비교, -6과 -1 비교, 4와 3 비교, 4과 3비교, 6와 5비교
localMax = Math.max(A[i], localMax + A[i]);
// console.log(localMax);
globalMax = Math.max(localMax, globalMax);
}
부분 구간 평균의 최소값 구하기
function solution(A) {
const sum = [];
A.forEach((v, i) => {
sum[i] = i === 0? A[i] : sum[i - 1] + A[i];
});
let minAvg = null;
let minAvgIndex = -1;
for (let i = 1; i < A.length; i++) {
// slice length === 2
const avg2 = i === 1 ? sum[i] / 2 : (sum[i] - sum[i-2]) / 2;
let avg3 = null;
if (i === 1) {
// slice length === 3
avg3 = null;
} else if (i === 2) {
avg3 = sum[i] / 3;
} else {
avg3 = (sum[i] - sum[i-3]) / 3;
}
if (minAvg === null) {
minAvg = avg2;
minAvgIndex = 0;
} else {
if (avg2 < minAvg) {
minAvg = avg2;
minAvgIndex = (i - 1);
}
if (avg3 !== null && avg3 < minAvg) {
minAvg = avg3;
minAvgIndex = (i - 2);
}
}
// console.log( `i: ${i}`);
// console.log( ` avg2: ${avg2}, avg3: ${avg3}`);
// console.log( ` minAvg: ${minAvg}, minAvgIndex: ${minAvgIndex}`);
}
return minAvgIndex;
}
function solution(A) {
var start = 0;
var currentSum = A[0] + A[1];
var minAvgSlice = currentSum / 2;
for (var i=2; i<A.length; i++) {
currentSum += A[i];
var newAvg = currentSum / 3;
if (newAvg < minAvgSlice) {
minAvgSlice = newAvg;
start = i-2;
}
currentSum -= A[i-2];
newAvg = currentSum / 2;
if (newAvg < minAvgSlice) {
minAvgSlice = newAvg;
start = i-1;
}
}
return start;
}
정렬
users.sort((a, b) => a.firstname.localeCompare(b.firstname))
진법 변환
var decimal = 1023;
var binary = decimal.toString(2); // 2진수로
var hex = "3ff";
var octal = parseInt(hex, 16).toString(8); // 16진수에서 8진수로
Map, Set 사용 코드
for (const key of map.keys()) {
// Map의 value type은 Set
if (map.get(key).size > criteria) {
const indexSet = map.get(key);
// Set을 Array로 변환
const arr = [...indexSet];
return arr[0];
}
}
주의사항
- 항상 edge case 주의
- Test input을 잘 넣어보자
Ref.