2021. 5. 19. 17:32γπ§π»π» iOS κ°λ°/Swift - Algorithm - Solutions
λ¬Έμ ν΄μ
Daum λ΄μ€μ κ°λ° μ 무λ₯Ό λ§‘κ² λ μ μ μ¬μ νλΈλ λ΄μ€ κ²μ λ¬Έμ μ κ°μ μ μ 무λ₯Ό 맑μλ€κ³ ν©λλ€. μ¬μ©μμκ² λμ± λ€μνκ³ νΈλ¦¬ν κ²μ κ²°κ³Όλ₯Ό μ 곡νκΈ° μν΄ μμΉ΄λ μ μ¬λλ₯Ό νμ©νμ¬ μ μ¬ν κΈ°μ¬λ€μ λ¬Άμ΄ μ 곡ν΄λ³΄κΈ°λ‘ νμ΅λλ€.
μμΉ΄λ μ μ¬λλ μ§ν© κ°μ μ μ¬λλ₯Ό κ²μ¬νλ λ°©λ²μΌλ‘ λ μ§ν©κ°μ κ΅μ§ν©μ ν¬κΈ°λ₯Ό λ μ§ν©κ°μ ν©μ§ν©μ ν¬κΈ°λ‘ λλ κ°μ μλ―Έν©λλ€.
μ΄ μμΉ΄λ μ μ¬λλ₯Ό μμμ μ€λ³΅μ νμ©νλ λ€μ€μ§ν©μμ νμ₯μν€κ² λλ©΄ κ΅μ§ν©μ λ μ§ν© λͺ¨λ ν¬ν¨νλ μμλ₯Ό μ΅μ κ°μλ§νΌμ ν¬ν¨νκ³ ν©μ§ν©μ λ μ§ν©μμ ν¬ν¨νλ μμλ₯Ό μ΅λ κ°μλ§νΌμ ν¬ν¨ν©λλ€.
μλ₯Ό λ€μ΄ λ λ€μ€μ§ν© A = { "AA", "AA", "AA", "BB"} , B = {"AA", "AA"} κ° μλ€κ³ ν΄λ΄ μλ€.
κ·Έλ κ² λλ©΄ λ λ€μ€μ§ν©μ κ΅μ§ν©μ λ μ§ν©μμ κ°μ΄ λ±μ₯νλ "AA"μ μ΅μ ν¬ν¨ κ°μμΈ 2λ§νΌ κ°μ§κ² λκ³ ν©μ§ν©μ "AA"μ μ΅λ λ±μ₯ κ°μμΈ 3λ§νΌ κ°μ§κ³ "BB"μ μ΅λ λ±μ₯ νμμΈ 1 λ§νΌ κ°μ§κ² λ©λλ€.
κ΅μ§ν© = { "AA", "AA" }
ν©μ§ν© = { "AA", "AA" ,"AA", "BB" }
λ λ¬Έμμ΄μ μ λ ₯ λ°μ μμΉ΄λ μ μ¬λλ₯Ό ꡬνκ² λλλ° λ¬Έμμ΄μ 2λ¬Έμμ© λμ΄μ λ€μ€μ§ν©μ νμ±ν©λλ€.
λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκ³ μνλ²³λ§ μ·¨κΈν©λλ€. λ μ§ν© λͺ¨λ 곡μ§ν©μΌ λλ μμΉ΄λ μ μ¬λλ₯Ό 1λ‘ μ μν©λλ€.
λ¬Έμ ν΄κ²° & μ½λ
import Foundation
func solution(_ str1:String, _ str2:String) -> Int {
// λμλ¬Έμλ₯Ό ꡬλ³νμ§ μκΈ° μν΄ λλ¬Έμλ‘ ν΅μΌν©λλ€.
// .map{$0}μ μ¬μ©νμ¬ μΆν λ λ¬Έμμ© λ¬Άμ΄μ£ΌκΈ° μν μμ
μ΄ νΈνλλ‘ λ°°μ΄λ‘ λ³νν©λλ€.
let capitalStr1 = str1.uppercased().map{$0}
let capitalStr2 = str2.uppercased().map{$0}
// κ΅μ§ν©,ν©μ§ν© λ°°μ΄
var intersection = [String]()
var union = [String]()
// ννμ 첫 λ²μ§Έ κ°μ ν΄λΉ KeyμΈ λ¬Έμλ₯Ό Aμμ ν¬ν¨νλ κ°μμ΄κ³
// λ λ²μ§Έ κ°μ Bμμ ν¬ν¨νλ κ°μλ₯Ό μλ―Έν©λλ€.
var countDict: Dictionary<String, (Int, Int)> = [:]
// λλ¬Έμ μνλ²³λ§ νν°λ§ νκΈ° μν ν¨μ
func isAlphabet(_ character: Character) -> Bool {
return character >= "A" && character <= "Z"
}
// μ
λ ₯λ°μ 첫 λ²μ§Έ λ¬Έμμ΄μ ν΅ν΄ λ€μ€ μ§ν© Aλ₯Ό λμ
λ리μ μ μ₯ν©λλ€.
// λ°λΌμ ννμ 첫 λ²μ§Έ κ°μ ν¬ν¨ κ°μλ₯Ό μ μ₯ν©λλ€.
for idx in 0..<capitalStr1.count - 1 {
if isAlphabet(capitalStr1[idx]) == false || isAlphabet(capitalStr1[idx+1]) == false {
continue
}
let temp = "\(capitalStr1[idx])\(capitalStr1[idx+1])"
// μ‘΄μ¬νλ κ²½μ° ν¬ν¨ κ°μ += 1, μλ κ²½μ° (1, 0)
if countDict[temp] != nil {
countDict[temp]!.0 += 1
} else {
countDict[temp] = (1, 0)
}
}
// μ
λ ₯λ°μ λ λ²μ§Έ λ¬Έμμ΄μ ν΅ν΄ λ€μ€ μ§ν© Bλ₯Ό λμ
λ리μ μ μ₯ν©λλ€.
// λ°λΌμ ννμ λ λ²μ§Έ κ°μ ν¬ν¨ κ°μλ₯Ό μ μ₯ν©λλ€.
for idx in 0..<capitalStr2.count - 1 {
if isAlphabet(capitalStr2[idx]) == false || isAlphabet(capitalStr2[idx+1]) == false {
continue
}
let temp = "\(capitalStr2[idx])\(capitalStr2[idx+1])"
if countDict[temp] != nil {
countDict[temp]!.1 += 1
} else {
countDict[temp] = (0, 1)
}
}
// λμ
λλ¦¬κ° λΉμ΄μλ κ²½μ° A, B λͺ¨λ 곡μ§ν©μ μλ―Ένλ―λ‘
// μμΉ΄λ μ μ¬λλ₯Ό 1λ‘ μ μνκ³ λ¦¬ν΄ν©λλ€.
if countDict.isEmpty {
return 1 * 65536
}
// λμ
λ리λ₯Ό νμνλ©° ν¬ν¨κ°μλ₯Ό λΉκ΅νμ¬ κ΅μ§ν©κ³Ό ν©μ§ν©μ ν΄λΉ λ¬Έμλ₯Ό λ£μ΄μ€λλ€.
for (key, value) in countDict {
let maxVal = max(value.0, value.1)
let minVal = min(value.0, value.1)
for _ in 0..<maxVal {
union.append(key)
}
for _ in 0..<minVal {
intersection.append(key)
}
}
return Int(Double(intersection.count)/Double(union.count) * 65536)
}
'π§π»βπ» iOS κ°λ° > Swift - Algorithm - Solutions' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift - νλ‘κ·Έλλ¨Έμ€] [3μ°¨] nμ§μ κ²μ (0) | 2021.05.27 |
---|---|
[Swift - νλ‘κ·Έλλ¨Έμ€] [3μ°¨] νμΌλͺ μ λ ¬ (0) | 2021.05.25 |
[Swift - νλ‘κ·Έλλ¨Έμ€] κ°μ₯ ν° μ μ¬κ°ν μ°ΎκΈ° (0) | 2021.05.22 |
[Swift - νλ‘κ·Έλλ¨Έμ€] Nκ°μ μ΅μ곡배μ ꡬνκΈ° (0) | 2021.05.20 |
[Swift - νλ‘κ·Έλλ¨Έμ€] λ°°λ¬ (0) | 2021.05.19 |