๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ 2 ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

by Fomagran ๐Ÿ’ป 2021. 5. 31.
728x90
๋ฐ˜์‘ํ˜•

 

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

 

programmers.co.kr


Solution

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์—ด๋ฆฐ ๊ด„ํ˜ธ = "{","[","("

 

๋‹ซํžŒ ๊ด„ํ˜ธ = "}","]",")"

 

๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. ์Šคํƒ์— ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ฅผ ๋„ฃ๊ณ  s๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋‹ซํžŒ ๊ด„ํ˜ธ์™€ ๋น„๊ตํ•œ๋‹ค.

 

์ฃผ์–ด์ง„ s๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์Šคํƒ์— ์—ด๋ฆฐ ๊ด€ํ˜ธ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์™”์„ ๋•Œ ์Šคํƒ์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰๋ฒˆ์งธ ์—ด๋ฆฐ๊ด„ํ˜ธ์™€ ํ˜„์žฌ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š๋‹ค๋ฉด

 

์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค.

 

(isRightBrackets ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

2. s๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉฐ 1์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

s๋ฅผ ํšŒ์ „ํ•˜๊ณ  1์—์„œ ํ–ˆ๋˜ ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

(rotateLeft ํ•จ์ˆ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!)

 

3. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ answer์— +1์„ ํ•ด์ค€๋‹ค.

 

์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ answer๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  +1์„ ํ•ด์ค๋‹ˆ๋‹ค.


Source Code

 

func solution(_ s:String) -> Int {
var str:String = s
let brackets:[String:String] = ["{":"}","[":"]","(":")"]
var stack:[String] = []
var answer:Int = 0
for _ in 0..<s.count {
stack = []
answer = isRightBrackes(s:rotateLeft(str: &str), stack: &stack, brackets: brackets) ? answer + 1 : answer
}
return answer
}
//์˜ณ์€ ๊ด„ํ˜ธ๋“ค์ธ์ง€ ํ™•์ธ
func isRightBrackes(s:String,stack:inout [String],brackets:[String:String]) -> Bool {
for bracket in s {
if brackets.keys.contains(String(bracket)) {
stack.append(String(bracket))
}else {
if !stack.isEmpty {
if brackets[stack.last!] != String(bracket) {
return false
}else {
stack.removeLast()
}
}else {
return false
}
}
}
return stack.isEmpty ? true : false
}
//์™ผ์ชฝ์œผ๋กœ ํšŒ์ „
func rotateLeft(str:inout String) -> String {
let first = str.removeFirst()
str += String(first)
return str
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€