ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Algorithm

[Algorithm][KAKAO] ๊ด„ํ˜ธ ๋ณ€ํ™˜

_๋ณด๋ฆ„ 2021. 4. 19. 22:30

๐Ÿ–ฅ ๋ฌธ์ œ

'(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด w๊ฐ€ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" ์ด๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฌธ์ž์—ด w๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, u๋Š” "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋” ์ด์ƒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•˜๋ฉฐ, v๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" ์ด๋ผ๋ฉด ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    3-1. ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ u์— ์ด์–ด ๋ถ™์ธ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ด ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    4-1. ๋นˆ ๋ฌธ์ž์—ด์— ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ '('๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-2. ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-3. ')'๋ฅผ ๋‹ค์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค.
    4-4. u์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋’ค์— ๋ถ™์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค."๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" p๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•ด "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๐Ÿค” ํ’€์ด ๋ฐฉ๋ฒ•

  1. func split(_ arr:[String]) -> String {}
    • ๋ฌธ์ž์—ด์„ ๊ท ํ˜•์žกํš ๊ด„ํ˜ธ ๋ฌธ์ž์—ด u์™€ v๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
  2. func convert(_ u:[String], _ v:[String]_ -> String {}
    • ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์•„๋‹ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป Swift Code

import Foundation


func solution(_ p:String) -> String {
    let p = p.map{String($0)}

    // step 1
    if p == [] {
        return ""
    }

    return split(p)
}


// step 2
func split(_ arr:[String]) -> String {
    var arr = arr
    var u: [String] = []
    var v: [String] = []

    while arr != [] {
        var balance = 1

        u.append(arr.removeFirst())

        while balance != 0 {
            if arr.first! == u[0] {
                balance += 1
            } else {
                balance -= 1
            }
            u.append(arr.removeFirst())
        }

        v = arr
        arr = []
    }

    return convert(u, v)
}


func convert(_ u:[String], _ v:[String]) -> String {
    if u == [] {
        return ""
    }

    var u = u

    // step 3
    var tmp: [String] = []

    for i in 0..<u.count {
        if u[i] == "(" {
            tmp.append("(")
        } else if tmp != [] {
            tmp.removeLast()
        }
    }

    if tmp == [] {
        // step 3-1
        return u.reduce("", +) + split(v)
    } else {
        // step 4
        u.removeFirst()
        u.removeLast()

        // step 4-4
        for i in 0..<u.count {
            if u[i] == "(" {
                u[i] = ")"
            } else {
                u[i] = "("
            }
        }

        return "(" + split(v) +  ")" + u.reduce("", +)
    }
}

 

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ด„ํ˜ธ ๋ณ€ํ™˜

์นด์นด์˜ค์— ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ ์ž…์‚ฌํ•œ "์ฝ˜"์€ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์—ญ๋Ÿ‰ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ผ๋Š” ์—…๋ฌด ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ

programmers.co.kr

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ