๋ฌธ์
๋ฌธ์ ๋งํฌ https://www.acmicpc.net/problem/2504
- 4๊ฐ์ ๊ธฐํธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์ฉํด์ ๋ง๋ค์ด์ง๋ ๊ดํธ์ด ์ค์์ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์๋๋ค.
- ํ ์์ ๊ดํธ๋ก๋ง ์ด๋ฃจ์ด์ง ‘()’์ ‘[]’๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ค.
- ๋ง์ผ X๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ฉด ‘(X)’์ด๋ ‘[X]’๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ๋๋ค.
- X์ Y ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ผ๋ฉด ์ด๋ค์ ๊ฒฐํฉํ XY๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ๋๋ค.
- ์๋ฅผ ๋ค์ด ‘(()[[]])’๋ ‘(())[][]’ ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด์ง๋ง ‘([)]’ ๋ ‘(()()[]’ ์ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ์๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ค ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด X์ ๋ํ์ฌ ๊ทธ ๊ดํธ์ด์ ๊ฐ(๊ดํธ๊ฐ)์ ์๋์ ๊ฐ์ด ์ ์ํ๊ณ ๊ฐ(X)๋ก ํ์ํ๋ค.
- ‘()’ ์ธ ๊ดํธ์ด์ ๊ฐ์ 2์ด๋ค.
- ‘[]’ ์ธ ๊ดํธ์ด์ ๊ฐ์ 3์ด๋ค.
- ‘(X)’ ์ ๊ดํธ๊ฐ์ 2×๊ฐ(X) ์ผ๋ก ๊ณ์ฐ๋๋ค.
- ‘[X]’ ์ ๊ดํธ๊ฐ์ 3×๊ฐ(X) ์ผ๋ก ๊ณ์ฐ๋๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด X์ Y๊ฐ ๊ฒฐํฉ๋ XY์ ๊ดํธ๊ฐ์ ๊ฐ(XY)= ๊ฐ(X)+๊ฐ(Y) ๋ก ๊ณ์ฐ๋๋ค.
- ์๋ฅผ ๋ค์ด ‘(()[[]])([])’ ์ ๊ดํธ๊ฐ์ ๊ตฌํด๋ณด์. ‘()[[]]’ ์ ๊ดํธ๊ฐ์ด 2 + 3×3=11 ์ด๋ฏ๋ก ‘(()[[]])’์ ๊ดํธ๊ฐ์ 2×11=22 ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ‘([])’์ ๊ฐ์ 2×3=6 ์ด๋ฏ๋ก ์ ์ฒด ๊ดํธ์ด์ ๊ฐ์ 22 + 6 = 28 ์ด๋ค.
- ์ฌ๋ฌ๋ถ์ด ํ์ด์ผ ํ ๋ฌธ์ ๋ ์ฃผ์ด์ง ๊ดํธ์ด์ ์ฝ๊ณ ๊ทธ ๊ดํธ๊ฐ์ ์์์ ์ ์ํ๋๋ก ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค.
- ์ฒซ์งธ ์ค์ ๊ดํธ์ด์ ๋ํ๋ด๋ ๋ฌธ์์ด(์คํธ๋ง)์ด ์ฃผ์ด์ง๋ค. ๋จ ๊ทธ ๊ธธ์ด๋ 1 ์ด์, 30 ์ดํ์ด๋ค.
- ์ฒซ์งธ ์ค์ ๊ทธ ๊ดํธ์ด์ ๊ฐ์ ๋ํ๋ด๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ผ ์ ๋ ฅ์ด ์ฌ๋ฐ๋ฅด์ง ๋ชปํ ๊ดํธ์ด์ด๋ฉด ๋ฐ๋์ 0์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด๋์ด
- stack์ ํ์ฉํ์ฌ ๊ณ์ฐํ๊ธฐ๋ก ํ์๋ค.
- '('๊ฐ ๋ค์ด์ค๋ฉด ์ค๊ฐ ๊ณ์ฐ๊ฐ์ 2๋ฅผ ๊ณฑํ๊ณ '['๊ฐ ๋ค์ด์ค๋ฉด ์ค๊ฐ ๊ณ์ฐ๊ฐ์ 3์ ๊ณฑํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ')'๊ฐ ๋ค์ด์์ ๋, stack์ด ๋น์ด์๊ฑฐ๋ stack์ ๋งจ ์ ๊ฐ์ด '('์ด ์๋๋ผ๋ฉด ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ์ด ๋์ด์์ง ์์๋ค๋ ๋ป์ด๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ์ 0์ผ๋ก ์ ์ฅํ๊ณ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ค.
- ๋ง์ฝ i - 1๋ฒ์งธ ๊ฐ์ด '('์ด๋ผ๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ ์ค๊ฐ ๊ณ์ฐ๊ฐ์ ๋ํ๊ณ stack์ ๋งจ ์ ๊ฐ์ ๋บ ๋ค, ์ค๊ฐ ๊ณ์ฐ๊ฐ์ 2๋ก ๋๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ']'๊ฐ ๋ค์ด์์ ๋, stack์ด ๋น์๊ฑฐ๋ stack์ ๋งจ ์ ๊ฐ์ด '['์ด ์๋๋ผ๋ฉด ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ์ด ๋์ด์์ง ์๋ค๋ ๋ป์ด๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ์ 0์ผ๋ก ์ ์ฅํ๊ณ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๋ค.
- ๋ง์ฝ i - 1๋ฒ์งธ ๊ฐ์ด '['์ด๋ผ๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ ์ค๊ฐ ๊ณ์ฐ๊ฐ์ ๋ํ๊ณ stack์ ๋งจ ์ ๊ฐ์ ๋บ ๋ค, ์ค๊ฐ ๊ณ์ฐ๊ฐ์ 3์ผ๋ก ๋๋๋ค.
- ๋ฐ๋ณต๋ฌธ์ ๋ค ๋๊ณ stack์ด ๋น์ด์์ง ์๋ค๋ฉด, ๊ดํธ์ ์์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์๋ค๋ ๋ป์ด๋ฏ๋ก 0์ ์ถ๋ ฅํ๊ณ ๋น์ด์๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ฒช์ ์ํ์ฐฉ์ค
- ์ฒ์์ stack ๋์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ์ ํ๋ ค๊ณ ํ์์ง๋ง ์๊ฐ์ฒ๋ผ ์ ๋์ง ์์๋ค...
- ๊ทธ๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ผ ์ข ์ค๋ ๊ฑธ๋ ธ๋ค ใ ใ
์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ2504 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// ๋ฌธ์์ด ์
๋ ฅ
String s = br.readLine();
// ๊ดํธ๋ฅผ ์ ์ฅํ stack
Stack<Character> cal = new Stack<>();
// ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๊ณ์ฐํ ๋ณ์
int result = 0;
// ์ค๊ฐ์ ๊ณ์ฐํ ๊ฐ์ ์ ์ฅํ ๋ณ์
int mid = 1;
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
// ๋ง์ฝ ๋ฌธ์๊ฐ '('๋ผ๋ฉด ์๊ดํธ๊ฐ ์ด๋ฆฌ๋ ๊ฒ์ด๋ฏ๋ก
// stack์ ( ๋ฅผ ๋ฃ๊ณ , ()๊ฐ ๋ ์๋ ์์ผ๋ฏ๋ก
// ์ค๊ฐ ๊ฒฐ๊ณผ๊ฐ์ 2๋ฅผ ๊ณฑํจ -> ex - (())์ด๋ฉด 2 * 2์ด๋ฏ๋ก
if(c == '('){
cal.push(c);
mid = mid * 2;
}
// ๋ฌธ์๊ฐ ')'์ด๋ผ๋ฉด ์๊ดํธ๊ฐ ๋ซํ๋ ๊ฒ
else if(c == ')'){
// ๋ง์ฝ stack์ด ๋น์ด์๋ค๋ฉด ๊ดํธ์ ์์๊ฐ ์๋ชป๋์๋ค๋ ๋ป์ด๊ณ
// stack์ ๋งจ ์์ ์๋ ๊ฐ์ด '('์ด ์๋ ๊ฒ๋ ๊ดํธ์ ์์๊ฐ ์๋ชป๋์๋ค๋
// ๋ป์ด๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ ๋ฐ๋ณต๋ฌธ ํ์ถ
if(cal.isEmpty() || cal.peek() != '('){
result = 0;
break;
}
// ๋ง์ฝ i - 1๊ฐ์ด '('์ด๋ผ๋ฉด
if(s.charAt(i - 1) == '('){
// ์๊ดํธ๊ฐ ์์ฑ ๋๋ ๊ฒ์ด๋ฏ๋ก
// ์ค๊ฐ์ ๊ณ์ฐํ ๊ฐ์ ์ต์ข
๊ฒฐ๊ณผ๊ฐ์ ๋ํจ
// ex) - ()()์ผ ๊ฒฝ์ฐ, 2 + 2์ด๋ฏ๋ก
result = result + mid;
}
// ๊ทธ๋ฆฌ๊ณ stack์์ ๋งจ ์์ ๊ฐ์ ๋นผ๋ธ ๋ค,
cal.pop();
// ์ค๊ฐ ๊ณ์ฐ๊ฐ์์ 2 ๋๋ ๊ฐ์ ์ค๊ฐ ๊ณ์ฐ๊ฐ์
// ์ ์ฅํ๋ ๋ณ์์ ๋ค์ ์ ์ฅ
mid = mid / 2;
}
// ๋ง์ฝ ๋ฌธ์๊ฐ '['๋ผ๋ฉด ๋๊ดํธ๊ฐ ์ด๋ฆฌ๋ ๊ฒ์ด๋ฏ๋ก
// stack์ [ ๋ฅผ ๋ฃ๊ณ , []๊ฐ ๋ ์๋ ์์ผ๋ฏ๋ก
// ์ค๊ฐ ๊ฒฐ๊ณผ๊ฐ์ 3์ ๊ณฑํจ -> ex - [[]]์ด๋ฉด 3 * 3์ด๋ฏ๋ก
else if(c == '['){
cal.push(c);
mid = mid * 3;
}
// ๋ฌธ์๊ฐ ']'์ด๋ผ๋ฉด ๋๊ดํธ๊ฐ ๋ซํ๋ ๊ฒ
else if(c == ']'){
// ๋ง์ฝ stack์ด ๋น์ด์๋ค๋ฉด ๊ดํธ์ ์์๊ฐ ์๋ชป๋์๋ค๋ ๋ป์ด๊ณ
// stack์ ๋งจ ์์ ์๋ ๊ฐ์ด '['์ด ์๋ ๊ฒ๋ ๊ดํธ์ ์์๊ฐ ์๋ชป๋์๋ค๋
// ๋ป์ด๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ ๋ฐ๋ณต๋ฌธ ํ์ถ
if(cal.isEmpty() || cal.peek() != '['){
result = 0;
break;
}
// ๋ง์ฝ i - 1๊ฐ์ด '['์ด๋ผ๋ฉด
if(s.charAt(i - 1) == '['){
// ์๊ดํธ๊ฐ ์์ฑ ๋๋ ๊ฒ์ด๋ฏ๋ก
// ์ค๊ฐ์ ๊ณ์ฐํ ๊ฐ์ ์ต์ข
๊ฒฐ๊ณผ๊ฐ์ ๋ํจ
// ex) - [][]์ผ ๊ฒฝ์ฐ, 3 + 3์ด๋ฏ๋ก
result = result + mid;
}
// ๊ทธ๋ฆฌ๊ณ stack์์ ๋งจ ์์ ๊ฐ์ ๋นผ๋ธ ๋ค,
cal.pop();
// ์ค๊ฐ ๊ณ์ฐ๊ฐ์์ 3 ๋๋ ๊ฐ์ ์ค๊ฐ ๊ณ์ฐ๊ฐ์
// ์ ์ฅํ๋ ๋ณ์์ ๋ค์ ์ ์ฅ
mid = mid / 3;
}
}
// ๋ง์ฝ stack์ด ๋ชจ๋ ๋น์๋ค๋ฉด ๋ชจ๋ ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์๋ค๋ ๋ป์ด๋ฏ๋ก
// ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ
if(cal.isEmpty()){
System.out.println(result);
}
// ๋น์ด์์ง ์๋ค๋ฉด ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์ด์์ง ์์๋ค๋ ๋ป์ด๋ฏ๋ก
// 0์ ์ถ๋ ฅ
else{
System.out.println(0);
}
}
}
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] BOJ 2294 ๋์ 2 (0) | 2024.12.17 |
---|---|
[Java] BOJ 12933 ์ค๋ฆฌ (2) | 2024.12.17 |
[Java] BOJ 21317 ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2024.12.16 |
[Java] BOJ 1850 ์ต๋๊ณต์ฝ์ (1) | 2024.12.15 |
[Java] BOJ 1564 ํฉํ ๋ฆฌ์ผ5 (0) | 2024.12.13 |