[Stack, Queue] 5. ์ ๋ง๋๊ธฐ
์ฌ๋ฌ ๊ฐ์ ์ ๋ง๋๊ธฐ๋ฅผ ๋ ์ด์ ๋ก ์ ๋จํ๋ ค๊ณ ํ๋ค. ํจ์จ์ ์ธ ์์ ์ ์ํด์ ์ ๋ง๋๊ธฐ๋ฅผ ์๋์์ ์๋ก ๊ฒน์ณ ๋๊ณ ,
๋ ์ด์ ๋ฅผ ์์์ ์์ง์ผ๋ก ๋ฐ์ฌํ์ฌ ์ ๋ง๋๊ธฐ๋ค์ ์๋ฅธ๋ค. ์ ๋ง๋๊ธฐ์ ๋ ์ด์ ์ ๋ฐฐ์น๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
• ์ ๋ง๋๊ธฐ๋ ์์ ๋ณด๋ค ๊ธด ์ ๋ง๋๊ธฐ ์์๋ง ๋์ผ ์ ์๋ค. - ์ ๋ง๋๊ธฐ๋ฅผ ๋ค๋ฅธ ์ ๋ง๋๊ธฐ ์์ ๋๋ ๊ฒฝ์ฐ ์์ ํ ํฌํจ๋๋๋ก ๋๋,
๋์ ์ ๊ฒน์น์ง ์๋๋ก ๋๋๋ค.
• ๊ฐ ์ ๋ง๋๊ธฐ๋ฅผ ์๋ฅด๋ ๋ ์ด์ ๋ ์ ์ด๋ ํ๋ ์กด์ฌํ๋ค.
• ๋ ์ด์ ๋ ์ด๋ค ์ ๋ง๋๊ธฐ์ ์ ๋์ ๊ณผ๋ ๊ฒน์น์ง ์๋๋ค.
์๋ ๊ทธ๋ฆผ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์๋ฅผ ๋ณด์ฌ์ค๋ค. ์ํ์ผ๋ก ๊ทธ๋ ค์ง ๊ตต์ ์ค์ ์ ์ ๋ง๋๊ธฐ์ด๊ณ , ์ ์ ๋ ์ด์ ์ ์์น,
์์ง์ผ๋ก ๊ทธ๋ ค์ง ์ ์ ํ์ดํ๋ ๋ ์ด์ ์ ๋ฐ์ฌ ๋ฐฉํฅ์ด๋ค.

์ด๋ฌํ ๋ ์ด์ ์ ์ ๋ง๋๊ธฐ์ ๋ฐฐ์น๋ ๋ค์๊ณผ ๊ฐ์ด ๊ดํธ๋ฅผ ์ด์ฉํ์ฌ ์ผ์ชฝ๋ถํฐ ์์๋๋ก ํํํ ์ ์๋ค.
1. ๋ ์ด์ ๋ ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ์ ์ธ์ ํ ์ ‘( ) ’ ์ผ๋ก ํํ๋๋ค. ๋ํ, ๋ชจ๋ ‘( ) ’๋ ๋ฐ ๋์ ๋ ์ด์ ๋ฅผ ํํํ๋ค.
2. ์ ๋ง๋๊ธฐ์ ์ผ์ชฝ ๋์ ์ฌ๋ ๊ดํธ ‘ ( ’ ๋ก, ์ค๋ฅธ์ชฝ ๋์ ๋ซํ ๊ดํธ ‘) ’ ๋ก ํํ๋๋ค.
์ ์์ ๊ดํธ ํํ์ ๊ทธ๋ฆผ ์์ ์ฃผ์ด์ ธ ์๋ค.
์ ๋ง๋๊ธฐ๋ ๋ ์ด์ ์ ์ํด ๋ช ๊ฐ์ ์กฐ๊ฐ์ผ๋ก ์๋ ค์ง๋๋ฐ, ์ ์์์ ๊ฐ์ฅ ์์ ์๋ ๋ ๊ฐ์ ์ ๋ง๋๊ธฐ๋ ๊ฐ๊ฐ 3๊ฐ์ 2๊ฐ์ ์กฐ๊ฐ์ผ๋ก ์๋ ค์ง๊ณ ,
์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง ์ ๋ง๋๊ธฐ๋ค์ ์ด 17๊ฐ์ ์กฐ๊ฐ์ผ๋ก ์๋ ค์ง๋ค.
์ ๋ง๋๊ธฐ์ ๋ ์ด์ ์ ๋ฐฐ์น๋ฅผ ๋ํ๋ด๋ ๊ดํธ ํํ์ด ์ฃผ์ด์ก์ ๋, ์๋ ค์ง ์ ๋ง๋๊ธฐ ์กฐ๊ฐ์ ์ด ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
ํ ์ค์ ์ ๋ง๋๊ธฐ์ ๋ ์ด์ ์ ๋ฐฐ์น๋ฅผ ๋ํ๋ด๋ ๊ดํธ ํํ์ด ๊ณต๋ฐฑ์์ด ์ฃผ์ด์ง๋ค. ๊ดํธ ๋ฌธ์์ ๊ฐ์๋ ์ต๋ 100,000์ด๋ค.
์ถ๋ ฅ
์๋ ค์ง ์กฐ๊ฐ์ ์ด ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์๋ฅผ ํ ์ค์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
()(((()())(())()))(())
์์ ์ถ๋ ฅ 1
17
์์ ์ ๋ ฅ 2
(((()(()()))(())()))(()())
์์ ์ถ๋ ฅ 2
24
ํ์ด
package Inflearn;
import java.util.Scanner;
import java.util.Stack;
public class n40_์ ๋ง๋๊ธฐ {
public static int solution(String str) {
Stack<Character> stack = new Stack<>();
char pre = ' ';
int ans = 0;
for(char c : str.toCharArray()) {
// ')'๊ฐ ๋ค์ด์จ ๊ฒฝ์ฐ
if(c == ')') {
// ๋ ์ด์ ์ธ ๊ฒฝ์ฐ
if(pre == '(') {
stack.pop();
ans += stack.size();
}
// ๋ง๋๊ธฐ์ ๋์ ์ธ ๊ฒฝ์ฐ
else {
stack.pop();
ans += 1;
}
}
// '('๊ฐ ๋ค์ด์จ ๊ฒฝ์ฐ
else if(c == '(')
stack.push('(');
pre = c;
}
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(solution(str));
}
}
'('๊ฐ ๋ค์ด์จ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด stack์ pushํ๊ณ , ')'๊ฐ ๋ค์ด์จ ๊ฒฝ์ฐ์๋ ๋ ์ด์ ์ธ์ง ๋ง๋๊ธฐ์ ๋์ ์ธ์ง ๊ตฌ๋ถํด์ผ ํ๋ค.
pre๋ผ๋ ๋ณ์์ ์ด์ ์ ๋ค์ด์จ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ณ , ๋ง์ฝ '(' ๋ค์์ผ๋ก ')'๊ฐ ๋์จ ๊ฒฝ์ฐ๋ ๋ ์ด์ ๋ก ํ๋จํ๋ค.
์ด ๊ฒฝ์ฐ์๋ stack size๋งํผ ์๋ ค์ง ๋ง๋๊ธฐ๊ฐ ์๊ธฐ๊ฒ ๋๋ฏ๋ก ans์ stack ์ฌ์ด์ฆ๋ฅผ ๋ํด์ค๋ค.
๋ง์ฝ ๋ง๋๊ธฐ์ ๋์ ์ธ ๊ฒฝ์ฐ์๋ stack์ pop ์์ผ์ฃผ๊ณ , ans++ ํด์ฃผ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
'Coding ๐ป > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Stack, Queue] 7. ๊ต์ก๊ณผ์ ์ค๊ณ (0) | 2023.01.30 |
---|---|
[Stack, Queue] 6. ๊ณต์ฃผ ๊ตฌํ๊ธฐ (1) | 2023.01.30 |
[Stack, Queue] 4. ํ์์ ์ฐ์ฐ(postfix) (0) | 2023.01.30 |
[Stack, Queue] 3. ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ(์นด์นด์ค) (0) | 2023.01.30 |
[Stack, Queue] 2. ๊ดํธ๋ฌธ์์ ๊ฑฐ (0) | 2023.01.30 |