๋ฌธ์
๊ดํธ ๋ฌธ์์ด(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โ๋ฅผ ํ ์ค์ ํ๋์ฉ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
1 ์ด | 128 MB | 183445 | 85851 | 61777 | 45.727% |
https://www.acmicpc.net/problem/9012
ํ์ด
๊ดํธ๋ ์ฌ๋ ๊ดํธ (
์ ๋ซ๋ ๊ดํธ )
๊ฐ ํ ์์ ์ด๋ฃจ์ด์ผ ํ๋ค.
๊ทธ๋ผ ์ด๋ฅผ ์คํ์ ์ ์ฉํด๋ณด์. ์ฌ๋ ๊ดํธ๊ฐ ์์๋๋ ์คํ์ ์์์ฃผ๊ณ (PUSH), ๋ซ๋ ๊ดํธ๊ฐ ์์ผ๋ฉด ์คํ์์ ํ๋๋ฅผ ์ง์์ฃผ๋ฉด(POP) ๋๋ค.
์ด์๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด 3๊ฐ์ง์ ๊ฒฝ์ฐ๋ก ๋๋๋ค.
1. ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅผ๋ : ์ต์ข
์ ์ธ ์คํ์ ์๋ฌด๊ฒ๋ ์์
2. ๊ดํธ๊ฐ ๋จ๋๊ฒฝ์ฐ(์ฌ๋ ๊ดํธ๊ฐ ๋ง์๋)
3. ๊ดํธ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ(๋ซ๋ ๊ดํธ๊ฐ ๋ง์๋)
1๋ฒ๊ณผ 2๋ฒ์ ๋ง์ง๋ง๊น์ง for๋ฌธ์ด ์ ์์ ์ผ๋ก ๋๊ณ ์คํ์ ๋จ๋๊ฒ์ด ์๋์ง ํ๋ณํ ๊ฒ์ด๊ณ ,
3๋ฒ์ ๋๊น์ง ๋์ง๋ชปํ๊ณ ๋น์คํ์ POP์ ํ๊ฒ ๋๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
์ด๋ฅผ ์ฝ๋๋ก ์ ์ฉํ์ฌ ๋ณด์.
์ฝ๋
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i=0; i<T; i++){
System.out.println(solve(sc.next()));
}
}
public static String solve(String s){
Stack<Character> stack = new Stack<>();
for(int i=0; i< s.length(); i++){
char c = s.charAt(i);
if(c == '('){
stack.push(c);
}
else if(stack.empty()){ //3๋ฒ ๊ฒฝ์ฐ
return "NO";
}
else {
stack.pop();
}
}
if(stack.empty()){ //1๋ฒ ๊ฒฝ์ฐ
return "YES";
}
else { //2๋ฒ ๊ฒฝ์ฐ
return "NO";
}
}
}