코딩테스트

[Swift 알고리즘] Codility - OddOccurrencesInArray

유정주 2022. 6. 17. 21:39
반응형

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

 

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

 

Github

 

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

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

github.com

 

문제 링크

 

OddOccurrencesInArray coding task - Learn to Code - Codility

Find value that occurs in odd number of elements.

app.codility.com

 

풀이

이번 문제는 쌍이 맞지 않고 남는 수를 구하는 문제입니다.

배열 원소의 범위가 1억이기 때문에 배열 index에 count를 저장하는 것은 메모리 효율적이지 않다고 생각했습니다.

그래서 key-value로 숫자-count 쌍을 이용해 숫자가 나온 횟수를 count 해주었습니다.

 

횟수가 홀수라면 짝이 맞지 않는거겠죠?

마지막에 filter를 이용해 횟수가 홀수인 것을 찾고 return 해주었습니다.

 

개선할 점

최대한 효율적으로 짜고 싶어서 filter를 대체할 코드가 무엇이 있을까 고민해봤는데요.

단순 for문이 filter보다 빠르므로 그냥 for문으로 처리하는 것도 괜찮을 것 같네요.

 

이번 문제의 답은 1개이므로 홀수가 나왔을 때 break를 해준다면

최악의 경우가 아닌 이상 filter보다 빠르겠다는 생각이 듭니다.

 

전체 코드

더보기
import Foundation

public func solution(_ A : inout [Int]) -> Int {
    var dict: [Int: Int] = [:]
    for num in A {
        dict[num] = (dict[num] ?? 0) + 1
    }

    let result = dict.keys.filter { dict[Int($0)]! % 2 != 0 }.first!
    return result
}

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

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

공감 댓글 부탁드립니다.

 

 

반응형