본문 바로가기

# 02/Swift - CTP

[Swift] 코딩테스트 연습! Lv0. 최빈값 구하기

반응형
/* 최빈값 구하기

 - 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.
*/
func solution13(_ array: [Int]) -> Int {
//    var dic = Dictionary(grouping: array) { $0 }.sorted {
//        $0.value.count > $1.value.count
//    }
//    return dic.count > 1 && dic[0].value.count == dic[1].value.count ? -1 : dic[0].key
    
    var dic:[Int:Int]=[:]
    for num in array {
        let count:Int = dic[num] ?? 0
        dic[num] = count+1
    }
    var sorted = dic.sorted(by: {$0.value > $1.value})
    var result:Int = 0
    if sorted.count > 1 && sorted[0].value == sorted[1].value {
        result = -1
    } else {
        result = sorted[0].key
    }
    
    return result
}

func solution12(_ array: [Int]) -> Int {
    let sorted = Dictionary(grouping: array) { $0 }.sorted { $0.value.count > $1.value.count }
    return sorted.count > 1 && sorted[0].value.count == sorted[1].value.count ? -1 : sorted[0].key
}

func solution11(_ array:[Int]) -> Int {
    var maxCount:Int = 0
    var result:Int = 0
        
    let arrays:[Int] = array.sorted()
        
    var currentNum: Int = arrays[0]
    var currentCount: Int = 0
        
    for num in arrays {
        if (currentNum == num) {
            currentCount += 1
        } else {
            if (currentCount > maxCount) {
                maxCount = currentCount
                result = currentNum
            } else if (maxCount == currentCount) {
                result = -1
            }
            currentNum = num
            currentCount = 1
        }
    }
    
    if (currentCount > maxCount) {
        result = currentNum
    } else if (currentCount == maxCount) {
        result = -1
    }
    
    return result
}
반응형