티스토리 뷰
처음에 이 문제를 만났을 때는
public func solution(_ A : inout [Int]) -> Int {
var left = 0
var right = 0
var difference = 0
for (index,item) in A.enumerated(){
if index == A.count - 1{break}
left += item
right = A[index+1...A.count-1].reduce(0, +)
if index == 0{
difference = abs(left-right)
} else if abs(left-right) < difference{
difference = abs(left-right)
}
}
return difference
}
이렇게 풀었다
그랬더니 시간복잡도가 O(N ** 2) 으로 나왔다
배열을 slice하고 reduce로 합을 구하는 부분 때문이다 ( 배열의 총합을 구하는데 O(N)이 드는데, 이 작업을 for문 돌면서 n번하니까 그런것같다 )
그래서 배열을 slice하고 reduce로 합을 구하는 부분을 덧셈,뺄셈으로 가능하도록 대체했더니.... 시간복잡도가 O(N) 나왔다 >____<
조금만 생각을 더 하면 더 효율적인 코드(시간복잡도 수치가 낮은)를 짤 수 있구나 :)
public func solution(_ A : inout [Int]) -> Int {
var left = 0
var right = A.reduce(0, +)
var difference = 0
for (index,item) in A.enumerated(){
if index == A.count - 1{break}
left += item
right -= item
if index == 0{
difference = abs(left-right)
} else if abs(left-right) < difference{
difference = abs(left-right)
}
}
return difference
}
'💻 > CS' 카테고리의 다른 글
재밌는 ^ (xor) operator (0) | 2018.11.23 |
---|
- Total
- Today
- Yesterday
- 장고 Custom Management Command
- 플러터 싱글톤
- PencilKit
- Flutter getter setter
- flutter deep link
- Watch App for iOS App vs Watch App
- Django Firebase Cloud Messaging
- SerializerMethodField
- 장고 URL querystring
- Python Type Hint
- ipad multitasking
- ribs
- 구글 Geocoding API
- Dart Factory
- Flutter Clipboard
- Sketch 누끼
- flutter 앱 출시
- cocoapod
- DRF APIException
- Django FCM
- Flutter Text Gradient
- METAL
- flutter build mode
- Flutter Spacer
- Django Heroku Scheduler
- github actions
- 플러터 얼럿
- Flutter 로딩
- drf custom error
- flutter dynamic link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |