알고리즘 기본 내용

Won Jihye·2022년 6월 14일
0

알고리즘

목록 보기
1/1

알면 간단히 풀릴 만한 문제들

부분 구간 합의 최대값 구하기


  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.

profile
꾸준히 하자

0개의 댓글