MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’ ๋ณธ๋ฌธ

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

[swift] ๋ฐฑ์ค€ - 2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’

MUKER 2023. 6. 6. 00:00
 

2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’

4๊ฐœ์˜ ๊ธฐํ˜ธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ด„ํ˜ธ์—ด ์ค‘์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ‘()’์™€ ‘[]’๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋‹ค. ๋งŒ์ผ X

www.acmicpc.net


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

let a = readLine()!.map { String($0) }
let value = ["(": 2, "[": 3]
let pair = [")": "(", "]": "["]
var stack = [String]()
var temp = 1
var result = 0

for i in 0..<a.count {
    if a[i]=="(" || a[i]=="[" {
        temp *= value[a[i]]!
        stack.append(a[i])
    } else {
        if stack.isEmpty || stack.last! != pair[a[i]] {
            result = 0
            break
        } else {
            if a[i-1]==pair[a[i]] { result += temp }
            temp /= value[stack.removeLast()]!
        }
    }
}
print(stack.isEmpty ? result : 0)

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

์˜ˆ์ œ :  (()[[]])([])

๊ด„ํ˜ธ๊ฐ€ ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค 2 ๋˜๋Š” 3์˜ ๊ฐ’์„ ๊ณฑํ•ด์„œ ๋ˆ„์ ์‹œํ‚ต๋‹ˆ๋‹ค.
์˜ˆ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž '('๊ฐ€ ๋“ค์–ด์˜ค๋ฉด temp ๋ณ€์ˆ˜์— 2๋ฅผ ์ €์žฅํ•˜๊ณ  stack๋ฐฐ์—ด์— ๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
์ฒ˜์Œ temp๋ณ€์ˆ˜๋Š” 1๋กœ ์ดˆ๊ธฐํ™”์‹œ์ผœ์คฌ์Šต๋‹ˆ๋‹ค.
temp = 2โ€‹


๋‹ค์Œ ๋ฌธ์ž '('๋„ ์—ด๋ฆฌ๋Š” ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด temp๊ฐ’๊ณผ 2๋ฅผ ๊ณฑํ•ด์„œ temp์— ์ €์žฅํ•˜๊ณ  ๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๊ณ„์‚ฐ์€ ๊ด„ํ˜ธ ์•ˆ์— ๊ด„ํ˜ธ๊ฐ€ ์žˆ์„ ๋•Œ ๊ณฑํ•ด์ฃผ๋Š” ์„ฑ์งˆ ๋•Œ๋ฌธ์— ๊ด„ํ˜ธ๊ฐ€ ์—ด๋ฆด ๋•Œ๋งˆ๋‹ค temp๊ฐ’์— ๊ณฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

temp = 4


๋‹ค์Œ์€ ๋‹ซํžˆ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค.
๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ stack์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ stack๋งˆ์ง€๋ง‰ ๊ด„ํ˜ธ๊ฐ€ ํ˜„์žฌ ๋‹ซํžŒ ๊ด„ํ˜ธ์˜ ์ง์ด ์•„๋‹ˆ๋ผ๋ฉด
์˜ฌ๋ฐ”๋ฅด์ง€ ๋ชปํ•œ ๊ด„ํ˜ธ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— result์— 0์„ ๋„ฃ๊ณ  break ์‹œํ‚ต๋‹ˆ๋‹ค.

stack์˜ ๋งˆ์ง€๋ง‰ ๊ด„ํ˜ธ๊ฐ€ ํ˜„์žฌ ๋‹ซํžŒ ๋ฌธ์ž์™€ ์ง ์ผ ๋•Œ
a๋ฐฐ์—ด์—์„œ ์•ž์˜ ๋ฌธ์ž๊ฐ€ ํ˜„์žฌ ๋ฌธ์ž์™€ ์ง์„ ์ด๋ฃฌ๋‹ค๋ฉด (ํ˜„์žฌ ')'๋‹ซํžŒ ๋ฐฐ์—ด์˜ ์•ž์˜ ๋ฌธ์ž๋Š”'('๋กœ ์ง์„ ์ด๋ฃจ๊ณ  ์žˆ์Œ)
temp๊ฐ’์„ result๊ฐ’์— ๋”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

temp = 4
result = 4


a๋ฐฐ์—ด์˜ ์•ž์˜ ๋ฌธ์ž๊ฐ€ ํ˜„์žฌ ๋ฌธ์ž์™€ ์ง์„ ์ด๋ฃฐ ๋•Œ๋งŒ ์˜จ์ „ํžˆ ํ•ด๋‹น ๊ด„ํ˜ธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ) (()[[]])([]) , ์ฃผํ™ฉ์ƒ‰์ด ์น ํ•ด์ง„ ๋ถ€๋ถ„๋งŒ ํ˜„์žฌ temp๊ฐ’์„ result์— ๋”ํ•ด์ฃผ๊ฒŒ ๋จ.

๋‹ค์Œ ๋‹ซํžŒ ๋ฐฐ์—ด์˜ value๋งŒํผ temp๊ฐ’์„ ๋‚˜๋ˆ ์ฃผ๊ณ , ์Šคํƒ์—์„œ ์ง€์›Œ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

temp = 2
reesult = 4


์œ„ ๊ณต์‹์„ ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์ ์šฉํ•œ๋‹ค๋ฉด

๋ชจ์–‘:(, temp:2, result:0
๋ชจ์–‘:(, temp:4, result:0
๋ชจ์–‘:), temp:2, result:4
๋ชจ์–‘:[, temp:6, result:4
๋ชจ์–‘:[, temp:18, result:4
๋ชจ์–‘:], temp:6, result:22
๋ชจ์–‘:], temp:2, result:22
๋ชจ์–‘:), temp:1, result:22
๋ชจ์–‘:(, temp:2, result:22
๋ชจ์–‘:[, temp:6, result:22
๋ชจ์–‘:], temp:2, result:28
๋ชจ์–‘:), temp:1, result:28

์œ„ ์ˆœ์„œ๋Œ€๋กœ temp๊ฐ’๊ณผ result๊ฐ’์ด ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.