avatar
Published on

Codility - Min Avg Two Slice

Author
  • avatar
    Name
    yceffort

Min Avg Two Slice

문제

길이가 N인 λΉ„μ–΄μžˆμ§€ μ•Šμ€ λ°°μ—΄ Aκ°€ μ£Όμ–΄μ§„λ‹€. ν•œμŒμ˜ 숫자 P, Q의 λ²”μœ„λŠ” 0 <= P < Q < N λ‹€. μ£Όμ–΄μ§„ P와 Q둜 A배열을 sliceν•œλ‹€. (μ΅œμ†Œ 2κ°œμ΄μƒμ˜ μš”μ†Œκ°€ μžˆμ–΄μ•Ό ν•œλ‹€.) (P, Q)λŠ” A[P] + A[P + 1] + ... + A[Q]이며, (P, Q)의 평균은 (A[P] + A[P + 1] + ... + A[Q]) / (Q βˆ’ P + 1)λ‹€. 평균이 μ΅œμ†Œκ°€ λ˜λŠ” P의 값을 κ΅¬ν•˜λΌ.

Aκ°€ μ•„λž˜μ™€ 같이 μ΄λ£¨μ–΄μ Έμžˆλ‹€κ³  κ°€μ •ν•˜μž.
A[0] = 4
A[1] = 2
A[2] = 2
A[3] = 5
A[4] = 1
A[5] = 5
A[6] = 8

slice (1, 2), 평균은 (2 + 2) / 2 = 2;
slice (3, 4), 평균은 (5 + 1) / 2 = 3;
slice (1, 4), 평균은 (2 + 2 + 5 + 1) / 4 = 2.5.

풀이

function solution(A) {
  let min = Number.MAX_SAFE_INTEGER
  let minIndex = 0
  for (let i = 0; i < A.length - 1; i++) {
    let twoSum = (A[i] + A[i + 1]) / 2

    if (min > twoSum) {
      min = twoSum
      minIndex = i
    }

    if (i + 2 <= A.length - 1) {
      let threeSum = (A[i] + A[i + 1] + A[i + 2]) / 3

      if (min > threeSum) {
        min = threeSum
        minIndex = i
      }
    }
  }

  return minIndex
}

ν•΄μ„€

μ²˜μŒμ— 고민을 많이 ν–ˆλŠ”λ°, λ¬Έμ œμ— νžŒνŠΈκ°€ μžˆμ—ˆλ‹€. μ˜ˆμ‹œμ—μ„œ 2개의 평균, 4개의 평균을 κ΅¬ν•˜λŠ” 예제λ₯Ό λ³΄μ—¬μ£Όμ—ˆλŠ”λ°, 4κ°œμ΄μƒμ˜ μš”μ†Œμ˜ ν‰κ· μ˜ μ΅œμ†Œκ°’μ€ 2~3개 λ‚΄μ—μ„œ κ²°μ •λœ λ‹€λŠ” 사싀이닀. κ·Έ μ‚¬μ‹€λ§Œ μΈμ§€ν•˜κ²Œ 되면, μ‰½κ²Œ ν’€μˆ˜ μžˆλŠ” λ¬Έμ œλ‹€.

https://app.codility.com/demo/results/trainingPXJM9C-P26/