[์คํ] 2. ๊ดํธ๋ฌธ์์ ๊ฑฐ
์ค๋ช
์ ๋ ฅ๋ ๋ฌธ์์ด์์ ์๊ดํธ ( ) ์ฌ์ด์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ ๋จ์ ๋ฌธ์๋ง ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ธ์.
์ ๋ ฅ
์ฒซ ์ค์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ๊ธธ์ด๋ 100์ ๋์ง ์๋๋ค.
์ถ๋ ฅ
๋จ์ ๋ฌธ์๋ง ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
(A(BC)D)EF(G(H)(IJ)K)LM(N)
์์ ์ถ๋ ฅ 1
EFLM
<<ํ์ด>>
-๋์ ํ์ด-
์๊ฐ๋ณต์ก๋ : O(N)
์ฐ์ ์ด ๋ฌธ์ ๋ Stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉด ์์ํ๊ฒ ํ ์ ์๋ค.
'(' ์ด ์์์ด ๋๋ฉด cnt๋ 1์ ๋ํ๊ณ , ')'๊ฐ ์์ผ๋ฉด cnt์ 1์ ๋บ๋ค. ์ด๋ ๊ฒ ๋๋ค๊ฐ
cnt = 0 ์ด ๋๋ ์์ ๋ถํฐ stack์๋ค๊ฐ ๋ฃ์ด์ค๋ค.
Stack์ LIFO ํํ์ด๋ฏ๋ก, ์ด๋ฅผ ๊ณ ๋ คํ์ฌ answer์ ๋ฌธ์๋ฅผ ๋ํ๋ ๊ตฌ์กฐ๋ฅผ ์ง์ ์ ๋ต์ ๋์ถํ๋ค!
import java.util.Scanner;
import java.util.Stack;
class Main {
private String solution(String n) {
Stack<Character> stack = new Stack<>();
int cnt = 0;
for(char x : n.toCharArray()) {
if(x == '(') cnt++;
else if (x == ')') cnt--;
else if (cnt == 0) stack.push(x);
}
int stackSize = stack.size();
String answer = "";
for(int i = 0; i < stackSize; i++) {
answer = stack.pop() + answer;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
String n = in.next();
System.out.println(T.solution(n));
}
}
-๊ฐ์ฌ๋ ํ์ด-
import java.util.Scanner;
import java.util.Stack;
class Main {
private String solution(String str) {
String answer = "";
Stack<Character> stack = new Stack<>();
for (char x : str.toCharArray()) {
if (x == ')') {
while (stack.pop() != '(');
} else stack.push(x);
}
for (int i = 0; i < stack.size(); i++) answer += stack.get(i);
return answer;
}
public static void main (String[]args){
Main T = new Main();
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(T.solution(str));
}
}
๊ฐ์ฌ๋์ ๋๋ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ Stack์ ํ์ฉํ์ง๋ง, ์กฐ๊ธ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ค.
์ฐ์ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๊ฐ์ ๋๋ฉด์ stack์ ๋ฃ๋ค๊ฐ ) ์ด ๋์ค๋ฉด ( ๋์ค๊ธฐ ๊น์ง popํ๋ค ! ๊ทธ๋ฐ์์ผ๋ก ํด์ ์ต์ข ์ ์ผ๋ก ๋จ๋ ๊ฒ์ answer์ ๋ํ๋ฉด์ ๊ฐ์ ๋์ถํ๋ค.
ํน์ง์
answer += stack.get(i);
๋๋ ์ฌํ๊ป Stack ๋ฉ์๋์๋ get()์๋ ์ค ์์๋ค. ๊ทผ๋ฐ get์ด ์์๊ณ ์ด๋ฌ๋ฉด ๊ตณ์ด stack์ ํน์ฑ LIFO๋ฅผ ์๊ฐ ์ ํ๊ณ ๊ฐ์ ์ถ์ถํ ์ ์๋ค !
๋ํ,
while (stack.pop() != '(');
์ด๋ฅผ ํ์ฉํ๋ฉด, ( ์ด๊ฐ์ด ๋์ค๊ธฐ๊น์ง pop์ ์ํค๋๋ฐ ์ด ๊ทธ๋ฌ๋ฉด ๋ง์ง๋ง ( ์ ์ ๊ฑฐ ์๋๋ ๊ฒ์ด ์๋๊ฐ?? ํ์ง๋ง ์ฌ์ค์ popํ๊ณ ๋์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์๋ ์ํฉ์ด ๋๋ค!! ์ด๋ฐ ์ ์ ์ ํ์ ํ์ ~~