알고리즘

[codility] 풀어보기 - MaxCounters

Dohoon 2017. 10. 18. 12:22

Lesson 4-4  - MaxCounters

내용 : Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.

문제 설명은 여기를 참고 http://hojak99.tistory.com/316

시간 복잡도 : O(N+M)

80% 코드 :

function solution(N, A) { // write your code in JavaScript (Node.js 6.4.0) let rt_arr = new Array(N); let max_counter = 0; let now_idx=0; rt_arr.fill(0); for(i in A) { now_idx=A[i]-1; if(A[i] == N+1) { rt_arr.fill(max_counter); } else { rt_arr[now_idx] +=1; if(rt_arr[now_idx] > max_counter) { max_counter= rt_arr[now_idx]; } } } return rt_arr; }


느낀점 :

  • 어거지리즘
  • 문제 이해하는데 시간이 더 많이 필요함
  • 설명이 너무 허접했던가 내가 영어를 못하던가
  • 영어 공부 해야하나 ㅠㅠ
  • 다른 사람들의 코드를 살펴보니 좋은 코드가 있어서 가져옴 (출처 : https://gist.github.com/jeanlescure/98542e1b40339445acc1)
  • function solution(N, A) { // write your code in JavaScript (Node.js 6.4.0) var j; var i; var len = A.length; var lastMax = 0; var max = 0; var counters = new Array (N); for(j = 0; j < N; j++) counters[j] = 0; var n1 = N + 1; for(j=0; j < len; j++){ if(A[j] < n1){ i = A[j] - 1; if (counters[i] < lastMax) counters[i] = lastMax; counters[i]++; if (max < counters[i]) max = counters[i]; } else { lastMax = max; } } for(j = 0; j < N; j++){ if (counters[j] < lastMax) counters[j] = lastMax; } return counters; }