MUKER_DEV with iOS

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 숫자 짝꿍 λ³Έλ¬Έ

πŸ€– μ•Œκ³ λ¦¬μ¦˜/programmers

[swift] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - 숫자 짝꿍

MUKER 2023. 2. 9. 23:40
 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

문제 ν‘ΈλŠ” 데 μžˆμ–΄ 도움이 λ˜λ„λ‘ λ‚˜μ˜ 풀이와 κ°œμ„ λœ 풀이λ₯Ό μ˜¬λ¦½λ‹ˆλ‹€.
λ˜ν•œ 풀이 ν›„ λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이λ₯Ό 보고 μ°Έκ³ ν• λ§Œν•œ 풀이도 μ˜¬λ¦½λ‹ˆλ‹€.

- λ¬Έμ œμ— 따라 λ‚˜μ˜ ν’€μ΄λ§Œ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
- ν•΄λ‹Ή 풀이듀은 풀이 쀑 ν•˜λ‚˜μΌ 뿐 μ΅œμ„ μ˜ ν’€μ΄λŠ” 아닐 수 μžˆμŠ΅λ‹ˆλ‹€.

 


 

문제 μ„€λͺ…

 

 1. 두 λ¬Έμžμ—΄μ„ λΉ„κ΅ν•˜μ—¬ λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” 문자λ₯Ό μ°ΎλŠ”λ‹€.

2. ν¬ν•¨ν•˜λŠ” 횟수만큼 λ¦¬ν„΄ν•œλ‹€(λ¬Έμžμ—΄λ‘œ).

 3. 찾은 λ¬Έμžκ°€ "0"으둜만 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€λ©΄ "0"을 λ°˜ν™˜ν•œλ‹€.

 4. λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” λ¬Έμžκ°€ μ—†λ‹€λ©΄ "-1"을 λ°˜ν™˜ν•œλ‹€.

 5. 찾은 λ¬ΈμžλŠ” λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.

 

 


 

첫 번째 풀이(μ‹€νŒ¨)

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    var myX = X.filter { Y.contains($0) }.sorted(by: >)
    var myY = Y.filter { X.contains($0) }.sorted(by: >)
    var result = [Character]()

    if myY.isEmpty && myX.isEmpty { return "-1" }

    for i in myX {
        if myY.contains(i) {
            result.append(i)
            myY.remove(at: myY.firstIndex(of: i)!)
        }
    }
    if result.reduce(0, { $0 + Int(String($1))! }) == 0 { return "0" }
    return String(result)
}

 

첫 번째 ν’€μ΄μž…λ‹ˆλ‹€.

μ‹œκ°„μ œν•œμ— κ±Έλ € μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

 


 

두 번째 풀이(μ‹€νŒ¨)

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    
    var myX = [Character: Int]()
    var result = [String]()
    
    for i in X {
        if myX[i] == nil { myX[i] = 1 }
        else { myX[i]! += 1 }
    }
    
    for i in Y {
        if myX[i] == nil || myX[i] == 0 { continue }
        else { result.append(String(i)); myX[i]! -= 1 }
    }
    
    if result.isEmpty { return "-1" }
    if result.allSatisfy({ $0 == "0" }) { return "0" }
    return result.sorted(by: >).joined()
}

 

κ³ μ°¨ν•¨μˆ˜λ₯Ό λΉΌκ³ 

μ΅œλŒ€ν•œ κ°„κ²°ν•˜κ²Œ μ½”λ“œλ₯Ό 짜보렀 λ…Έλ ₯ν–ˆμ§€λ§Œ

μ—­μ‹œ μ‹œκ°„μ œν•œμ— κ±Έλ ΈμŠ΅λ‹ˆλ‹€.

 


 

μ„Έ 번째 풀이(μ •λ‹΅)

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    
    var myX = [Character: Int]()
    var myY = [Character: Int]()
    var result = [String]()
    
    for i in X { myX[i] = (myX[i] ?? 0) + 1 }
    for i in Y { myY[i] = (myY[i] ?? 0) + 1 }
    
    for i in myX.keys {
        result += Array(repeating: String(i), count: min(myX[i] ?? 0, myY[i] ?? 0))
    }
    
    if result.isEmpty { return "-1" }
    if result.allSatisfy({ $0 == "0" }) { return "0" }
    
    return result.sorted(by: >).joined()
}

 

Y도 λ”•μ…”λ„ˆλ¦¬λ‘œ λ§Œλ“€μ–΄λ΄€μŠ΅λ‹ˆλ‹€.

 

λ‘λ²ˆμ§Έ ν’€μ΄μ—μ„œλŠ”

Yλ₯Ό λ”•μ…”λ„ˆλ¦¬λ‘œ λ§Œλ“€μ–΄μ„œ ν‘ΈλŠ”κ±°λ³΄λ‹€

Yλ₯Ό νƒμƒ‰ν•˜λ©° ν•œλ²ˆμ— Xλ₯Ό 비ꡐ해 ν‘ΈλŠ”κ²Œ λΉ λ₯΄λ‹€ μƒκ°ν–ˆλŠ”λ°

 

였히렀

Y λ”•μ…”λ„ˆλ¦¬λ₯Ό ν•˜λ‚˜ λ§Œλ“€κ³ 

X λ”•μ…”λ„ˆλ¦¬λ₯Ό νƒμƒ‰ν•˜λ©° λΉ„κ΅ν–ˆλ”λ‹ˆ

μ‹œκ°„μ œν•œμ— 톡과할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 


 

μ°Έκ³ ν• λ§Œν•œ 풀이

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    let arr1 = Array(X)
    let arr2 = Array(Y)
    let uniqueKey = Set(arr1).intersection(Set(arr2))
    var answer = ""
    for key in uniqueKey.sorted(by: >) {
        answer += String(repeating: key, count: min(arr1.filter{$0 == key}.count, arr2.filter{$0 == key}.count))
    }
    return answer == "" ? "-1" : ((uniqueKey.count == 1 && uniqueKey.contains("0")) ? "0" : answer)
}

 

μ’‹μ•„μš”κ°€ λ§Žμ•˜λ˜ ν’€μ΄μΈλ°μš”.

intersectionν•¨μˆ˜λ₯Ό 처음 λ΄μ„œ κ°€μ Έμ™€λ΄€μŠ΅λ‹ˆλ‹€.

 

let uniqueKey = Set(arr1).intersection(Set(arr2))

 

ν•΄λ‹Ήν•¨μˆ˜λŠ”

Set(arr1)와 Set(arr2)λ₯Ό 비ꡐ해

μ€‘λ³΅λ˜λŠ” 값을 μƒˆλ‘œμš΄ Set으둜 λ¦¬ν„΄ν•΄μ€λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μ‹œκ°„μ œν•œμ— μ˜ˆλ―Όν•œ 11~15번 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€μ—μ„œ

μ•½ 9μ΄ˆκ°€ λ‚˜μ˜€λ©΄μ„œ μ•„μŠ¬μ•„μŠ¬ν•˜κ²Œ ν†΅κ³Όν•˜λŠ” λͺ¨μŠ΅μ„ λ³΄μž…λ‹ˆλ‹€.