코딩테스트

[Swift 알고리즘] Codility - TapeEquilibrium

유정주 2022. 6. 18. 00:42
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 "Codility - TapeEquilibrium" 문제를 풀었습니다.

 

Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

TapeEquilibrium coding task - Learn to Code - Codility

Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

app.codility.com

 

풀이

이번 문제는 | (A[0] + ... + A[P-1]) - (A[P] + ... A[N-1]) | 을 구하는 문제입니다.

반복문을 돌 때마다 reduce를 돌리면 O(N^2)이기 때문에 처음부터 시도하지 않았습니다.

맨 처음 한 번만 전체 합을 구한 뒤 앞의 수를 빼면 범위의 합을 구할 수 있습니다.

결과적으로 O(N)으로 답을 구할 수 있었습니다.

 

반성문

이번 문제는 좀 많이 틀렸습니다... 문제 이해하기가 왤캐 어려운지..

A[n-1] - 0까지 계산을 해버려서 계속 틀리더라고요 ㅠ..

문제가 제대로 읽힐 때 방심해서 한 두 개씩 놓치는 게 치명적인 거 같아요 정말..

문제를 단어 단위로 꼼꼼이 읽는 습관을 길러야겠습니다.

 

전체 코드

더보기
import Foundation

public func solution(_ A : inout [Int]) -> Int {
    // write your code in Swift 4.2.1 (Linux)
    var front = 0, back = A.reduce(0, +)
    
    var result = 0
    for (index, num) in A.enumerated() {
        front += num
        back -= num

        let diff = abs(front - back)
        if index == 0 {
            result = diff
        } else if index == A.count - 1 {
            break
        } else {
            result = min(result, diff)
        }
    }

    return result
}

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형