본문으로 건너뛰기
yceffort
PostsSeriesTagsAbout🧪 Research
EN

Tweaks

theme
accent palette
film grain
minimal mode
BACK TO INDEX
◆ ESSAY
--min
--year
KOoriginal

mailMail icongithubtwitter
yceffort
•
© 2026
•
https://yceffort.kr
BACK TO INDEX
◆ ESSAY

Codility - Max Counters

avatar
yceffort
2020-06-24 · 3분
3min
2020year
KOoriginal
algorithmjavascript

Max Counters

문제

숫자 N이 주어진다. 이 숫자 N은 모든 요소가 0인 길이 N인 배열을 의미한다. 그리고 배열 A가 존재한다.

숫자 N이 5로 주어지고, 배열 A는 [3, 4, 4, 6, 1, 4, 4] 라고 가정하자.

초기 값 [0, 0, 0, 0 0]
A[0] = 3, 3번째 (3-1번째) 요소의 크기를 1 늘린다.
- [0, 0, 1, 0, 0]
A[0] = 4, 4번째 (4-1번째) 요소의 크기를 1 늘린다.
- [0, 0, 1, 1, 0]
A[0] = 4, 4번째 (4-1번째) 요소의 크기를 1 늘린다.
- [0, 0, 1, 2, 0]
A[0] = 6, 모든 숫자의 크기를 현재 가장 큰 값으로 맞춘다.
- [2, 2, 2, 2, 2]
....

최종 결과는
- [3, 2, 2, 4, 2]

풀이

function solution(N, A) {
  // 0으로 초기화된 길이 N의 배열을 만든다.
  const array = Array(N).fill(0)
  // 배열 내 최대 값
  let max = 0
  // 마지막 max counter의 기준이 되었던 수
  let maxCounter = 0
  for (let i = 0; i < A.length; i++) {
    // 모든 숫자를 올려야 하는 경우
    if (A[i] > N) {
      // maxCounter에 다같이 올라가는 최대 숫자를 저장해 둔다.
      maxCounter = max

      // 하나씩만 올리면 되는 경우
    } else {
      // 현재 숫자가 maxCounter보다 작을 경우 maxCounter로 초기화 한다.
      if (array[A[i] - 1] < maxCounter) {
        array[A[i] - 1] = maxCounter
      }

      // 그리고 +1을 한다
      array[A[i] - 1] += 1

      // 이렇게 새롭게 세팅된 숫자가 배열의 최대값인지 확인한다.
      if (max < array[A[i] - 1]) {
        max = array[A[i] - 1]
      }
    }
  }

  // 배열의 값이 maxCounter보다 작다면 그 값으로 리턴한다.
  return array.map((i) => (i < maxCounter ? maxCounter : i))
}

해설

처음에는 저 maxCounter액션을 array를 map을 돌면서 +1 을 해줬더니 timeout 에러가 났다. 그도 그럴 것이 안그래도 배열을 n회 순환하는데, +1 을하면서 또 순환하면 복잡도가 O(N^2)이 될 것이기 때문이다. 그래서 최대한 배열을 한번에 순환하는 방식으로 해결하고자 노력했다.

https://app.codility.com/demo/results/training7YGA6S-4D7/

관련 글

  • #javascript#algorithm

    자바스크립트로 메모이제이션 구현하기

    까먹지 않게 기억해두기

    2020-11-23·1분
  • #javascript#algorithm

    자바스크립트로 구현해보는 다양한 정렬

    ## 거품(버블)정렬 - 가까운 두 원소를 비교해서 정렬하는 방식이다. - `O(N^2)` - 코드가 단순하고 구현하기 쉽다 - 느리다. ![bubble-sort](https://upload.wikimedia.org/wikipedia/commons/3/37/Bubble_sort_animation.gif) ```javascript function bub...

    2020-07-01·3분
  • #algorithm#javascript

    Codility - Nesting

    ## Nesting ### 문제 `(`와 `)`로 이루어진 문자열이 있다. 이 문자열의 `(` `)` 짝이 맞게 이루어져 있는지 확인하라. ### 풀이 ```javascript function solution(S) { const split = S.split('') const stack = [] for (let i of split...

    2020-06-25·1분
  • #algorithm#javascript

    Codility - Missing Integer

    ## Missing Integer ### 문제 주어진 배열 A에 빠져 있는 가장 작은 양의 정수를 구하시오 ``` A=[1, 3, 6, 4, 1, 2] 이라면 답은 5 A=[1, 2, 3] 이라면 답은 4 A=[-1, -3] 이라면 답은 1 ``` ### 풀이 ```javascript function solution(A) { // 배열 길...

    2020-06-24·1분

새 글을 놓치고 싶지 않으시다면 RSS로 구독해 주세요.

RSS 구독 →

yceffort — 프론트엔드 엔지니어입니다. 발표·기술 자문·기고 문의는 이곳에서 받고 있습니다.

← Back to the blogIssue on GitHub →