
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 | |
} |
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์ซ์ ๊ฒ์ (0) | 2021.06.11 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง 2 ๋ชจ๋ 0์ผ๋ก ๋ง๋ค๊ธฐ (0) | 2021.06.02 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค ํ๋ ฌ ํ ๋๋ฆฌ ํ์ ํ๊ธฐ (0) | 2021.05.24 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค 2018 Summer/Winter Coding ๋ฐฐ๋ฌ (0) | 2021.05.21 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค 2018 Summer/Winter Coding ๋ฐฉ๋ฌธ ๊ธธ์ด (0) | 2021.05.20 |
๋๊ธ