반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "Codility - CyclicRotation" 문제를 풀었습니다.
Codility는 포스팅을 어떻게 해야 깔끔할지 고민 중입니다.
결과 스크린샷 + 움짤? 아니면 결과 스크린샷 + 움짤 + 코드? 고민이 되는 부분입니다 ㅎ..
여러 가지 방법으로 포스팅 해봐야겠어요.
Github
문제 링크
풀이
이번 문제는 배열의 원소를 오른쪽으로 K회 움직인 결과를 출력하면 됩니다.
이때 효율성 테스트를 해보지는 않았지만!
맨 앞에 insert를 하는 것은 연산의 오버헤드를 발생 시키므로 매우 비효율적입니다.
따라서 저는 reversed( ) -> append( ) -> reversed( ) 하는 방법을 사용했습니다.
reversed( )는 언뜻보면 O(n) 같지만 O(1)의 시간복잡도를 가진 메서드입니다.
그래서 맨 앞에 insert 하는 것보다 훨씬 효율적이에요.
만약 가독성이 안 좋다고 생각된다면 메서드로 만들어서 사용하는 것도 방법일 듯 합니다.
전체 코드
더보기
import Foundation
public func solution(_ A : inout [Int], _ K : Int) -> [Int] {
var a = A
if a.count <= 1 || (a.min() == a.max()) { //비어있거나 모두 차있으면 return a
return a
}
(0..<K).forEach { _ in
let last = a.popLast()!
a = a.reversed()
a.append(last)
a = a.reversed()
}
return a
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형