MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด„ํ˜ธ ๋ณ€ํ™˜ ๋ณธ๋ฌธ

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

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด„ํ˜ธ ๋ณ€ํ™˜

MUKER 2023. 6. 24. 12:50
 

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

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

programmers.co.kr


์„ฑ๊ณต ํ’€์ด

import Foundation

func solution(_ p:String) -> String {
    
    var result = ""
    
    func correctCheck(_ s: String) -> Bool {
        var cStack = [String]()
        let strArr = s.map {String($0)}
        for i in 0..<s.count {
            if strArr[i]=="(" {
                cStack.append(strArr[i])
            } else {
                if cStack.isEmpty || cStack.last != "(" {
                    return false
                } else {
                    cStack.removeLast()
                }
            }
        }
        return cStack.isEmpty
    }
    
    func balanceCheck(_ w: String) -> String {
        if w=="" {return ""}
        var stack = [String]()
        var count = (0,0)
        var wArr = w.map {String($0)}
        var u = "", v = ""
        
        for i in 0..<wArr.count { // u,v ๊ตฌํ•˜๊ธฐ
            if wArr[i] == "(" {
                count.0 += 1
            } else {
                count.1 += 1
            }
            stack.append(wArr[i])
            if count.0 == count.1 {
                u = stack.joined()
                v = wArr.suffix(wArr.count-i-1).joined()
                print("u: \(u), v: \(v)")
                break
             }
        }
        
        if u.first == "(" { // ์›๋ž˜๋Š” ๋งŒ๋“ค์—ˆ๋˜ correctCheck ํ•จ์ˆ˜๋ฅผ ์ป์ง€๋งŒ, ํ’€์ด์ƒ u์˜ ์ฒซ๋ฒˆ์งธ๊ฐ€ "("์ธ์ง€๋งŒ ํ™•์ธํ•ด๋„ ๋จ.
            result += u
            return u+balanceCheck(v)
        } else {
            var temp = u.map {String($0)}
            temp.removeFirst()
            temp.removeLast()
            for i in 0..<temp.count {
                if temp[i] == "(" {
                    temp[i] = ")"
                } else {
                    temp[i] = "("
                }
            }
            return "(" + balanceCheck(v) + ")" + temp.joined()
        }
    }
    print(result)
    return balanceCheck(p)
}

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

- ์ง€๋ฌธ์˜ ์˜ˆ์‹œ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๊ณ  ๊ทธ๋Œ€๋กœ ์ž˜ ๊ตฌํ˜„ํ•ด๋‚ด๋ฉด ๋˜๋Š” ๋ฌธ์ œ
- ํ•˜์ง€๋งŒ ๋‚˜๋Š” 2์‹œ๊ฐ„์ด๋‚˜ ๊ฑธ๋ฆฐ ๋ฌธ์ œ^^