https://www.acmicpc.net/problem/9012
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(bf.readLine());
for(int tc=0; tc<T; tc++) {
String str = bf.readLine();
Stack<Character> s = new Stack<Character>();
boolean flag = true;
for(int i=0; i<str.length(); i++) {
// ํ์ฌ ๋ฌธ์๊ฐ '(' ์ธ ๊ฒฝ์ฐ ์คํ์ ์ ์ฅ
if(str.charAt(i) == '(')
s.push('(');
// ํ์ฌ ๋ฌธ์๊ฐ ')' ์ธ ๊ฒฝ์ฐ
else {
if(s.isEmpty()) { // ์คํ์ด ๋น์ด์์ผ๋ฉด ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๊ฒฝ์ฐ
flag = false;
break;
}
else if(s.peek() == '(') // ์คํ์ ์ ์ฅ๋ ๊ฐ์ด '(' ์ธ ๊ฒฝ์ฐ -> ์ ๊ฑฐ
s.pop();
else if(s.peek() == ')') // ์คํ์ ์ ์ฅ๋ ๊ฐ์ด ')' ์ธ ๊ฒฝ์ฐ -> ์ ์ฅ
s.push(')');
}
}
if(!flag || !s.isEmpty())
System.out.println("NO");
else
System.out.println("YES");
}
bf.close();
}
}
ํ์ด
๊ดํธ ์ฒ๋ฆฌํ๋ ๋ฌธ์ ๋ ๊ฑฐ์ ๋๋ถ๋ถ ์คํ์ผ๋ก ํด๊ฒฐ๋๋ ๊ฒ ๊ฐ๋ค.
() ์์ธ๊ฒฝ์ฐ YES , ๊ทธ๋ ์ง ์์๊ฒฝ์ฐ NO๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ .
ํ์ฌ ๋ฌธ์๊ฐ ' ( ' ์ธ ๊ฒฝ์ฐ ์คํ์ ์ ์ฅํ๊ณ
ํ์ฌ ๋ฌธ์๊ฐ ' ) ' ๊ฐ ์ค๋ ๊ฒฝ์ฐ๋ง ์๊ฐ์ ํด์ฃผ๋ฉด ๋๋ค.
- ์คํ์ด ๋น์ด์๋ ๊ฒฝ์ฐ -> ' ) ' ๋ฅผ ์ง์ธ ์ ์์ผ๋ฏ๋ก ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๋ค. ๋ฐ๋ผ์ ๋ ์ด์ ๋ฐ๋ณต๋ฌธ์ ํ์ํ ํ์ ์์ด flag๋ฅผ false๋ก ์ค์ ํ๊ณ ์ข ๋ฃํ๋ค.
- ์คํ์ ์ ์ฅ๋ ๊ฐ(peek())์ด ' ( ' ์ธ ๊ฒฝ์ฐ -> '( )' ์ฌ๋ฐ๋ฅธ ๊ดํธ ์์ด๋ฏ๋ก ์คํ์์ '('์ ์ ๊ฑฐํ๋ค.(pop())
- ์คํ์ ์ ์ฅ๋ ๊ฐ(peek())์ด ' ) ' ์ธ ๊ฒฝ์ฐ -> ' ) ' ๋ฅผ ์คํ์ ์ ์ฅํ๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ๋ณด๋... ํ์ฌ ๋ฌธ์๊ฐ ' ) ' ๊ฐ ์ค๋ ๊ฒฝ์ฐ์์ ์ ๋ ๊ฒ ๋๋์ง ์์๋ ๋ ๊ฒ ๊ฐ์๋ค.
๋ฌธ์ ์์๋ ()(()) ์ ๊ฐ์ด ' ) ' ๋ฌธ์๊ฐ ์ฐ์์ผ๋ก ์ค๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ์ง๋ง, Stack์ผ๋ก ํด๊ฒฐํ๋ฉด '()' ์์ด ์ค๋ฉด ๊ดํธ์์ด ์ ๊ฑฐ๋๋ฏ๋ก ์ฐ์๋ ' ) ' ๊ฐ ์ฌ ์ ์๋ค.
๋ฐ๋ผ์ ํ์ฌ ๋ฌธ์๊ฐ ' ) ' ์ธ๊ฒฝ์ฐ์ ์คํ์ด ๋น์ด์๊ฑฐ๋, ์ด์ ์คํ์ ์ ์ฅ๋ ๊ฐ์ด ' ) ' ์ธ๊ฒฝ์ฐ ๋ชจ๋ NO ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(bf.readLine());
for(int tc=0; tc<T; tc++) {
String str = bf.readLine();
Stack<Character> s = new Stack<Character>();
boolean flag = true;
for(int i=0; i<str.length(); i++) {
// ํ์ฌ ๋ฌธ์๊ฐ '(' ์ธ ๊ฒฝ์ฐ ์คํ์ ์ ์ฅ
if(str.charAt(i) == '(')
s.push('(');
// ํ์ฌ ๋ฌธ์๊ฐ ')' ์ธ ๊ฒฝ์ฐ
else {
// ์คํ์ด ๋น์ด์๊ฑฐ๋ ์คํ์ ์ ์ฅ๋ ๊ฐ์ด ')' ์ธ ๊ฒฝ์ฐ - ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์ X
if(s.isEmpty() || s.peek() == ')') {
flag = false;
break;
}
else if(s.peek() == '(') // ์คํ์ ์ ์ฅ๋ ๊ฐ์ด '(' ์ธ ๊ฒฝ์ฐ -> ์ ๊ฑฐ
s.pop();
}
}
if(!flag || !s.isEmpty())
System.out.println("NO");
else
System.out.println("YES");
}
bf.close();
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1302๋ฒ: ๋ฒ ์คํธ์ ๋ฌ(์ ๋ ฌ, ํ์) (0) | 2020.04.24 |
---|---|
[๋ฐฑ์ค] 1940๋ฒ: ์ฃผ๋ชฝ(์ํ, ์ ๋ ฌ) (0) | 2020.04.23 |
[๋ฐฑ์ค] 17608๋ฒ: ๋ง๋๊ธฐ(๊ตฌํ) (0) | 2020.04.10 |
[๋ฐฑ์ค] 5533๋ฒ: ์ ๋ํฌ(๊ตฌํ) (0) | 2020.04.10 |
[๋ฐฑ์ค] 5032๋ฒ: ํ์ฐ ์๋ฃ(๊ตฌํ, ์ํ) (0) | 2020.04.10 |
๋๊ธ