๋ฌธ์ ์ค๋ช
๊ดํธ ๋ฌธ์์ด(Parenthesis String, PS)์ ๋ ๊ฐ์ ๊ดํธ ๊ธฐํธ์ธ ‘(’ ์ ‘)’ ๋ง์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ฌธ์์ด์ด๋ค. ๊ทธ ์ค์์ ๊ดํธ์ ๋ชจ์์ด ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด(Valid PS, VPS)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ ์์ ๊ดํธ ๊ธฐํธ๋ก ๋ “( )” ๋ฌธ์์ด์ ๊ธฐ๋ณธ VPS ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ง์ผ x ๊ฐ VPS ๋ผ๋ฉด ์ด๊ฒ์ ํ๋์ ๊ดํธ์ ๋ฃ์ ์๋ก์ด ๋ฌธ์์ด “(x)”๋ VPS ๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ VPS x ์ y๋ฅผ ์ ํฉ(concatenation)์ํจ ์๋ก์ด ๋ฌธ์์ด xy๋ VPS ๊ฐ ๋๋ค. ์๋ฅผ ๋ค์ด “(())()”์ “((()))” ๋ VPS ์ด์ง๋ง “(()(”, “(())()))” , ๊ทธ๋ฆฌ๊ณ “(()” ๋ ๋ชจ๋ VPS ๊ฐ ์๋ ๋ฌธ์์ด์ด๋ค.
์ฌ๋ฌ๋ถ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๊ดํธ ๋ฌธ์์ด์ด VPS ์ธ์ง ์๋์ง๋ฅผ ํ๋จํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ YES ์ NO ๋ก ๋ํ๋ด์ด์ผ ํ๋ค.
์ ๋ ฅ
์ ๋ ฅ ๋ฐ์ดํฐ๋ ํ์ค ์ ๋ ฅ์ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ T๊ฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ก ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ ์ฒซ ๋ฒ์งธ ์ค์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์๋ฅผ ๋ํ๋ด๋ ์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ๋ฐ์ดํฐ์ ์ฒซ์งธ ์ค์๋ ๊ดํธ ๋ฌธ์์ด์ด ํ ์ค์ ์ฃผ์ด์ง๋ค. ํ๋์ ๊ดํธ ๋ฌธ์์ด์ ๊ธธ์ด๋ 2 ์ด์ 50 ์ดํ์ด๋ค.
์ถ๋ ฅ
์ถ๋ ฅ์ ํ์ค ์ถ๋ ฅ์ ์ฌ์ฉํ๋ค. ๋ง์ผ ์ ๋ ฅ ๊ดํธ ๋ฌธ์์ด์ด ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด(VPS)์ด๋ฉด “YES”, ์๋๋ฉด “NO”๋ฅผ ํ ์ค์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
์ถ๋ ฅ
NO
NO
YES
NO
YES
NO
๋ด ๋ฌธ์ ํ์ด
import Foundation
let count = Int(readLine()!)!
for _ in 0..<count {
let input = readLine()!
var stack = [Character]()
var check = true
for i in input {
if i == "(" {
stack.append(i)
}
else {
if stack.isEmpty { check = false; break }
else { stack.removeLast() }
}
}
if check == false { print("NO") }
else {
if !stack.isEmpty { print("NO") }
else { print("YES") }
}
}
์ด ๋ฌธ์ ๋ ํ๋ก๊ทธ๋๋จธ์ค ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์ ์ ์์ฃผ ์ ์ฌํ๋ค.
์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์ ์์๋ ์คํ์ ์ฌ์ฉํ์ง ์๊ณ +, - ์ฐ์ฐ์ ์ด์ฉํด ์ฝ๊ฒ ํ์๋ค.
ํ์ง๋ง ์ฌ๊ธฐ์๋ ์คํ์ ์ด์ฉํ์ฌ ๋ค๋ฅด๊ฒ ํ์ดํด๋ณด์๋ค.
- "("๊ฐ ์ ๋ ฅ๋์๋์ง, ")"๊ฐ ์ ๋ ฅ๋์๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ๊ฑด๋ฌธ์ ์์ฑํ๋ค.
- "("๊ฐ ์ ๋ ฅ๋์์ ๋๋ ํ์ )๊ฐ ์ฌ์ง, ์๋์ง ์์ง ๋ชจ๋ฅด๋ ์ํ์ด๋ฏ๋ก, stack์ ์ถ๊ฐ๋ง ํด์ค๋ค.
- ")" ์
๋ ฅ์์๋ ์ด์ ์ ๋ง๋ "("์์ด ์กด์ฌํ๋์ง๋ฅผ ์ฒดํฌํด์ค์ผํ๋ค.
์ด ๋, ์คํ์ด ๋น์๋ค๋ฉด ์ณ์ง ์์ ๋ฌธ์ฅ์ด ๋๋ฏ๋ก check๋ฅผ false๋ก ๋ฐ๊ฟ์ค ํ ๋ฐ๋ก breakํด์ค๋ค.
์คํ์ด ๋น์ด์์ง ์๋ค๋ฉด, ๊ตณ์ด ")"๋ ์ถ๊ฐํด์ฃผ์ง ์๊ณ ,stack์ ๋ง์ง๋ง "("๋ฅผ ์ญ์ ํด์ค๋ค.
("("๊ณผ ")"์ด ์๋ง๊ฒ ๋ง๋ฌ๋ค๋ฉด ์ฌ๋ฐ๋ฅธ ์์ด๊ธฐ ๋๋ฌธ์, ๊ตณ์ด ์คํ์ด ๋ ํ์์์ด ์ ๊ฑฐํด์ค๋ค.) - ์์ ๊ฐ์ด ๋ชจ๋ ๊ดํธ๋ฅผ ๊ฒ์ฌํด์ค ๋ค, check๊ฐ false๋ก ๋ฐ๋์ด์๋ค๋ฉด ๋ฐ๋ก "NO"๋ฅผ ์ถ๋ ฅํ๊ณ ,
๊ทธ๋ ์ง ์๋ค๋ฉด ์คํ์ด ๋น์๋์ง๋ฅผ ํ์ธํด์ค๋ค.
์คํ์ด ๋น์ด์์ง์๋ค๋ฉด ์ฌ๋ฐ๋ฅธ ์์ด ๋์ง ๋ชปํด ์คํ์ ๋จ์ ๊ดํธ๊ฐ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก,
"NO"๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด "YES"๋ฅผ ์ถ๋ ฅํด์ค๋ค.
๐ก ํผ๋๋ฐฑ
- ์คํ์ ๊ฐ๋
์ ์ ๋ง ์ฝ๊ฒ ๋๊ปด์ง์ง๋ง,
๋ง์ ํ์ดํ ๋๋ ๋ณต์กํ๊ณ ์๊ฐ๋ณด๋ค ์์ธ๊ฐ ๋ง์ ํธ๋๋ฐ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆฐ๋ค. - ๊ทธ๋๋ ๋ง์ด ํ๋ค๋ณด๋ ์ ์ ์ต์ํด์ง๊ณ ์๋ ๊ฒ ๊ฐ์์,, ๊ณ์ ๋ณต์ตํด์ผ๊ฒ ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์คํฐ์ BOJ #17298 (0) | 2021.08.08 |
---|---|
[Swift Algorithm] ๊ท ํ์กํ ์ธ์ BOJ #4949 (0) | 2021.08.07 |
[Swift Algorithm] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ Programmers(Lv.2) (0) | 2021.08.06 |
[Swift Algorithm] ์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ BOJ #6198 (0) | 2021.08.06 |
[Swift Algorithm] ํ BOJ #2493 (0) | 2021.08.04 |
๋๊ธ