MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - [1์ฐจ] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - [1์ฐจ] ๋‰ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ง

MUKER 2023. 3. 22. 23:20
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


ํ’€์ด

func solution(_ str1:String, _ str2:String) -> Int {
    let unrefinedStr1 = str1.uppercased().utf8.map { $0 } // ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜
    let unrefinedStr2 = str2.uppercased().utf8.map { $0 }
    var refinedStr1 = [String]() // A~Z๋งŒ ํฌํ•จ๋œ ์ •์ œ๋œ ๋ฐฐ์—ด
    var refinedStr2 = [String]()
    var result = [0,0]
    for i in 0..<unrefinedStr1.count-1 { // str1์—์„œ A~Z๋งŒ ํฌํ•จํ•œ ๋ฌธ์ž์—ด ์ •์ œ
        let a = Int(unrefinedStr1[i])
        let b = Int(unrefinedStr1[i+1])
        if (65...90).contains(a) && (65...90).contains(b) {
            refinedStr1.append(String(UnicodeScalar(a)!) + String(UnicodeScalar(b)!))
        }
    }
    for i in 0..<unrefinedStr2.count-1 { // str2์—์„œ A~Z๋งŒ ํฌํ•จํ•œ ๋ฌธ์ž์—ด ์ •์ œ
        let a = Int(unrefinedStr2[i])
        let b = Int(unrefinedStr2[i+1])
        if (65...90).contains(a) && (65...90).contains(b) {
            refinedStr2.append(String(UnicodeScalar(a)!) + String(UnicodeScalar(b)!))
        }
    }
    let dic1 = Dictionary(grouping: refinedStr1, by: { $0 })
    let dic2 = Dictionary(grouping: refinedStr2, by: { $0 })
    let intersection = Set(refinedStr1).intersection(refinedStr2) // ๊ต์ง‘ํ•ฉ
    let union = Set(refinedStr1).union(refinedStr2) // ํ•ฉ์ง‘ํ•ฉ
    for i in intersection { // ๊ต์ง‘ํ•ฉ์—์„œ min์ธ ์ˆซ์ž๋ฅผ result[0]์— ๋„ฃ๊ธฐ
        result[0] += min(dic1[i]!.count,dic2[i]!.count)
    }
    for i in union { // ํ•ฉ์ง‘ํ•ฉ์—์„œ max์ธ ์ˆซ์ž๋ฅผ result[1]์— ๋„ฃ๊ธฐ
        result[1] += max(dic1[i]?.count ?? 0,dic2[i]?.count ?? 0)
    }
    guard result != [0,0] else { return 65536 }
    return Int(Double(result[0]) / Double(result[1]) * 65536)
}

ํ’€์ด ํ‚ค์›Œ๋“œ

์•„์Šคํ‚ค ์ฝ”๋“œ - String.UTF8
๊ต์ง‘ํ•ฉ - Set().intersection()
ํ•ฉ์ง‘ํ•ฉ - Set().union()