๋ฐฑ์ค ๋ฌธ์ ๋ชจ์
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/9012
9012๋ฒ: ๊ดํธ
๊ดํธ ๋ฌธ์์ด(Parenthesis String, PS)์ ๋ ๊ฐ์ ๊ดํธ ๊ธฐํธ์ธ ‘(’ ์ ‘)’ ๋ง์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋ฌธ์์ด์ด๋ค. ๊ทธ ์ค์์ ๊ดํธ์ ๋ชจ์์ด ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด(Valid PS, VPS)์ด๋ผ๊ณ
www.acmicpc.net
๋ฌธ์
๊ดํธ ๋ฌธ์์ด(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”๋ฅผ ํ ์ค์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
์ ์ถ๋ ฅ ์์
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ์๋ฃ ๊ตฌ์กฐ
- ๋ฌธ์์ด
- ์คํ
๋ฌธ์ ํ์ด
- ์ ์ T๋ฅผ ์ ๋ ฅ๋ฐ์ T๋งํผ ๋ฐ๋ณตํ๋ค.
- input์ ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ์ ๋ ฅ๋ฐ๊ณ , stack์ Characterํ ๋ฐฐ์ด๋ก ์ด๊ธฐํํ๋ค. flag๋ true๋ก ์ด๊ธฐํํ๋ค.
- input์ ์์๋ฅผ ์์๋๋ก ๊บผ๋ด s์ ๋์
ํ๊ณ , for๋ฌธ์ ๊ตฌ๋ฌธ์ ์คํํ๋ค.
- ์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์์ "(" ์ด๋ฉด stack์ ์ถ๊ฐํ๋ค.
- ")"์ธ ๊ฒฝ์ฐ, stack์ด ๋น์ด์์ผ๋ฉด flag๋ฅผ false๋ก ๋ฐ๊พผ ํ for๋ฌธ์ ์ข ๋ฃํ๋ค. ๋น์ด์์ง ์๋ค๋ฉด stack์ ๋ง์ง๋ง ์์๋ฅผ ์ญ์ ํ๋ค.
- for๋ฌธ์ด ์ข ๋ฃ๋๊ณ , stack์ด ๋น์ด์๊ณ flag๊ฐ true๋ผ๋ฉด "Yes"๋ฅผ, ์๋๋ผ๋ฉด "No"๋ฅผ ์ถ๋ ฅํ๋ค.
์์ค์ฝ๋
for _ in 0..<Int(readLine()!)! {
let input = readLine()!
var stack = [Character]()
var flag = true
for s in input{
if s == "(" {
stack.append("(")
}
else {
if stack.isEmpty {
flag = false
break
}
stack.removeLast()
}
}
stack.isEmpty && flag ? print("YES") : print("NO")
}
- 8ms ์์
๋ค๋ฅธ ์ฝ๋
func isValidPS(_ str: String) -> Bool {
var standard = 0
for char in str {
if char == "(" {
standard += 1
} else if char == ")" {
standard -= 1
}
if standard < 0 {
return false
}
}
return standard == 0
}
if let inputNumber = Int(readLine() ?? "") {
for _ in 0..<inputNumber {
print(isValidPS(readLine() ?? "") ? "YES" : "NO")
}
}
- "(" ์ผ ๋ ๋ณ์ standard์ 1์ ๋ํ๊ณ , ")"์ผ ๋ 1์ ๋บ๋ค.
- standard๊ฐ 0๋ณด๋ค ์์์ง๋ฉด false๋ฅผ ๋ฐํํ๋ค.
- 8ms ์์
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.03.19 |
---|---|
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋์ถฉ ๋ง๋ ์ํ (0) | 2023.03.19 |
[Swift] ๋ฐฑ์ค 10828๋ฒ - ์คํ (0) | 2023.03.18 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ์นด๋ ๋ญ์น (0) | 2023.03.18 |
[Swift] ํ๋ก๊ทธ๋๋จธ์ค LV.1 ๋๋ง์ ์ํธ (0) | 2023.03.18 |