public func solution(_ A : inout [Int]) -> Int {
let directions = A.map(TravelDirection.init)
var (eastTotal, passingPairs) = (0, 0)
for direction in directions {
switch direction {
case .east:
eastTotal += 1
case .west:
passingPairs += eastTotal
case nil:
continue
}
if passingPairs > 1000000000 {
return -1
}
}
return passingPairs
}
public enum TravelDirection: Int {
case east, west
}
배열을 순회하면서 동쪽으로 가는 차량을 발견한 경우 1씩 증가시키다가, 서쪽으로 가는 차량을 발견하면 그동안 축적한 동쪽으로 가는 차량 수를 더해서 짝의 갯수를 기록한다. 배열의 끝까지 이를 반복하고 짝의 갯수을 반환한다. 만약 기준 숫자보다 짝의 숫자가 넘을 시에는 바로 -1을 반환한다.
(+이번엔 우아한 코드 작성을 시도해보았다)