[Codility] 4. MaxCounters
[Codility] 4. MaxCounters
문제 링크
문제 요약
주어지는 배열 A의 값에 따라 해당 원소의 값을 1을 증가시키는 increase(X) 연산을 수행하거나, 해당 원소의 값이 주어지는 N+1과 같을 때 모든 원소를 Max 값으로 바꾸는 max counter 연산을 수행.
배열의 모든 원소 값을 순회하며 수행한 결과 최종 배열을 반환.
요구사항
N and M are integers within the range [1..100,000]
each element of array A is an integer within the range [1..N + 1].
코드
for loop에서는 MaxValue 값으로 counterArr을 갱신하지 않는다.
maxValue만 순회할 때 갱신한다. 단, N+1이 되었다면 flag 값도 바꾸고, 해당 원소가 다시 A의 element로 지정되었다면 해당 원소에 포함된 배열을 직접 수정한다.
최대값이 바뀌었는데도 불구하고 갱신되지 않은 원소는 map으로 처리하여 flag와 비교한다.
import Foundation
import Glibc
public func solution(_ N : Int, _ A : inout [Int]) -> [Int] {
var counterArr = [Int](repeating: 0, count: N) // 0,0,0,0,0
var maxValue: Int = 0
var flagMaxValue: Int = 0
for element in A {
let counterIdx = element - 1
if(element < N + 1) {
//최대값이 갱신되었을 때(아직 CounterArr 배열에는 미반영)
if(counterArr[counterIdx] <= flagMaxValue) {
counterArr[counterIdx] = flagMaxValue + 1
} else {
counterArr[counterIdx] += 1
}
if(counterArr[counterIdx] > maxValue) {
maxValue = counterArr[counterIdx]
}
}
else { //element == N+1, 기준값 대입
flagMaxValue = maxValue
}
}
//CounterArr 반영
counterArr = counterArr.map {
if $0 < flagMaxValue {
return flagMaxValue
} else {
return $0
}
}
return counterArr
}
Swift 길이가 있는 Array 선언 방법
var arr = [Int](repeating: 0, count: N) // 0,0,0,0,0
Author And Source
이 문제에 관하여([Codility] 4. MaxCounters), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@iseeu95/Codility-4.-MaxCounters저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)