๐ก Info
๋ด์ฉ
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 ์ด๋ค.
์ฌ๋ฌ๋ถ์ด ํ์ด์ผ ํ ๋ฌธ์ ๋ ์ฃผ์ด์ง ๊ดํธ์ด์ ์ฝ๊ณ ๊ทธ ๊ดํธ๊ฐ์ ์์์ ์ ์ํ๋๋ก ๊ณ์ฐํ์ฌ ์ถ๋ ฅํ๋ ๊ฒ์ด๋ค.
๐ฅ์ ๋ ฅ ์กฐ๊ฑด
(()[[]])([])
[][]((])
๐ค์ถ๋ ฅ ์กฐ๊ฑด
28
0
์ค์ ํ์ด ์๊ฐ : 35๋ถ
package BJ;
import java.util.*;
public class BJ2504 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String List = sc.nextLine();
int openCntS = 0;
int closeCntS = 0;
int openCntL = 0;
int closeCntL = 0;
int result = 0;
for(int i=0; i<List.length(); i++) {
if(List.charAt(i) == '(') openCntS++;
if(List.charAt(i) == ')') closeCntS++;
if(List.charAt(i) == '[') openCntL++;
if(List.charAt(i) == ']') closeCntL++;
}
if(openCntS == closeCntS && openCntL == closeCntL) {
result = (openCntS*2) + ((openCntL+1)*3);
} else {
result = 0;
}
System.out.println(result);
}
}
//before
if(List.charAt(i) == '(') openCntS++;
if(List.charAt(i) == ')') closeCntS++;
if(List.charAt(i) == '[') openCntL++;
if(List.charAt(i) == ']') closeCntL++;
}
//after
/*์ฌ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ํด๋น ๊ดํธ๋ฅผ ์คํ์ push
- temp *2 ๋๋ *3ํ๊ธฐ
*/
if(List.charAt(i) == '(') {
stack.push(List.charAt(i));
temp *= 2;
}
if(List.charAt(i) == '[') {
stack.push(List.charAt(i));
temp *= 3;
}
/*๋ซ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ์คํ์ด ๋น์ด์๊ณ + ์คํ ๋งจ ์์ ์๋ ๊ดํธ์ ํ์ฌ ๊ดํธ๊ฐ ๋งค์น๋์ง ์๋๋ค๋ฉด(peek๋ก ํ์ธ)
-> ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์์ด๋ก ๋ณด๊ณ ๋น ์ ธ๋๊ฐ๊ธฐ
*/
if(List.charAt(i) == ')' && (stack.isEmpty() || stack.peek() != '(')) {
isValid = false;
break;
}
if(List.charAt(i) == ']' && (stack.isEmpty() || stack.peek() != '[')) {
isValid = false;
break;
}
/*์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ์ฑ๋ฆฝ๋๋ ๊ฒฝ์ฐ
- ์ด์ ์ ์ฌ๋ ๊ดํธ๊ฐ ๊ฐ์ ์ข
๋ฅ์ ๊ดํธ์๋์ง ํ์ธ -> ํด๋น ๊ดํธ์ ํ ๋น๋ ๊ฐ์ ๊ฒฐ๊ณผ์ ๋ํ๊ธฐ
- ์คํ์์ ๊ดํธ๋ฅผ pop
- ์์ ๊ฐ temp๋ฅผ ํด๋น ๊ดํธ์ ๊ท์น์ ๋ง๊ฒ /=2 ๋๋ /=3
*/
if(List.charAt(i) == ')') {
if(List.charAt(i-1) == '(')
result += temp;
stack.pop();
temp /= 2;
}
if(List.charAt(i) == ']') {
if(List.charAt(i-1) == '[')
result += temp;
stack.pop();
temp /= 3;
}
}
//before
if(openCntS == closeCntS && openCntL == closeCntL) {
result = (openCntS*2) + ((openCntL+1)*3);
} else {
result = 0;
}
//after
if(!isValid || !stack.isEmpty()) { //!(์ฌ๋ฐ๋ฅธ ๊ดํธ์ด) ์ฆ, ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ์ด์ด๊ฑฐ๋ ์คํ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ 0 ์ถ๋ ฅ
result = 0;
}
[BOJ] ๋ฐฑ์ค 2504๋ฒ ๊ดํธ์ ๊ฐ (Java)
์ค์ ํ์ด ์๊ฐ : 1์๊ฐ 38๋ถ(์ฒซ ํ์ด ํฌํจ)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String List = sc.nextLine();
Stack<Character> stack = new Stack<>();
int result = 0;
int temp = 1; //์์ ๊ฐ์ ๊ดํธ๊ฐ ์ฌ๋ ๊ดํธ์ผ ๊ฒฝ์ฐ 2๋ก, ์ฌ๋ ๋๊ดํธ์ผ ๊ฒฝ์ฐ 3์ผ๋ก ์ด๊ธฐํ
boolean isValid = true; //์ฌ๋ฐ๋ฅธ ๊ดํธ ์์ด ์
๋ ฅ๋์๋์ง ์ฌ๋ถ ํ์ธ
for(int i=0; i<List.length(); i++) {
/*์ฌ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ํด๋น ๊ดํธ๋ฅผ ์คํ์ push
- temp *2 ๋๋ *3ํ๊ธฐ
*/
if(List.charAt(i) == '(') {
stack.push(List.charAt(i));
temp *= 2;
}
if(List.charAt(i) == '[') {
stack.push(List.charAt(i));
temp *= 3;
}
/*๋ซ๋ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ์คํ์ด ๋น์ด์๊ณ + ์คํ ๋งจ ์์ ์๋ ๊ดํธ์ ํ์ฌ ๊ดํธ๊ฐ ๋งค์น๋์ง ์๋๋ค๋ฉด(peek๋ก ํ์ธ)
-> ์ฌ๋ฐ๋ฅด์ง ์์ ๋ฌธ์์ด๋ก ๋ณด๊ณ ๋น ์ ธ๋๊ฐ๊ธฐ
*/
if(List.charAt(i) == ')' && (stack.isEmpty() || stack.peek() != '(')) {
isValid = false;
break;
}
if(List.charAt(i) == ']' && (stack.isEmpty() || stack.peek() != '[')) {
isValid = false;
break;
}
/*์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด ์ฑ๋ฆฝ๋๋ ๊ฒฝ์ฐ
- ์ด์ ์ ์ฌ๋ ๊ดํธ๊ฐ ๊ฐ์ ์ข
๋ฅ์ ๊ดํธ์๋์ง ํ์ธ -> ํด๋น ๊ดํธ์ ํ ๋น๋ ๊ฐ์ ๊ฒฐ๊ณผ์ ๋ํ๊ธฐ
- ์คํ์์ ๊ดํธ๋ฅผ pop
- ์์ ๊ฐ temp๋ฅผ ํด๋น ๊ดํธ์ ๊ท์น์ ๋ง๊ฒ /=2 ๋๋ /=3
*/
if(List.charAt(i) == ')') {
if(List.charAt(i-1) == '(')
result += temp;
stack.pop();
temp /= 2;
}
if(List.charAt(i) == ']') {
if(List.charAt(i-1) == '[')
result += temp;
stack.pop();
temp /= 3;
}
}
if(!isValid || !stack.isEmpty()) { //!(์ฌ๋ฐ๋ฅธ ๊ดํธ์ด) ์ฆ, ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ์ด์ด๊ฑฐ๋ ์คํ์ด ๋น์ด์์ง ์์ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ 0 ์ถ๋ ฅ
result = 0;
}
System.out.println(result);
}
}