내가 푼 방식:
먼저 몫과 나머지를 계산하여, 스피드를 고려했을 때 각 progress에 대해서 계산되는 배열을 구한다. 예를 들어, progresses 가 [93,30,55] 면 배열 array 는 [7,3,9] 이다.
for 문에 where 절을 이용했다.
위와 같이, in 뒤에 나오는 변수에 대해서도 사용할 수 있지만,
for data in alldata where data.isodd == false {
...
}
과 같이도 사용할 수 있다.
한편, index > 0 부터므로 빈배열 result에 1을 넣고 시작해야한다.
array가 [7,3,9] 일 경우, index가 1일때 else if 절로 와서 위에서 넣었던 1에 1을 더한다. 즉 result[0] = 1 + 1을 한다.
실수했던것은, 다음줄에 있는 부분을 빠뜨린것이다. 현재의 인덱스(index)를 앞서의 인덱스(index-1)의 값과 같게해야한다.
예를들어 array 가 [16,1,7,70,2,18] 일때 2번째 인덱스인 1을 16으로 바꿔야 7역시 else if절로 올것이기 때문이다.
결과:
정보:
작업개수가 100개 므로 n²이어도 1초 이내에 가능하다.
append의 평균 시간 복잡도는 O(1), 최악의 시간복잡도는 메모리를 재할당할때, O(n)이다.
인사이트:
swift로 코딩테스트를 준비하게 되었다.
시간복잡도를 공부해야겠다.