๋ค์ ๊ท์น์ ์งํค๋ ๋ฌธ์์ด์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ์ ์ํฉ๋๋ค.
()
, []
, {}
๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์
๋๋ค.A
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, (A)
, [A]
, {A}
๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์
๋๋ค. ์๋ฅผ ๋ค์ด, []
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ฏ๋ก, ([])
๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์
๋๋ค.A
, B
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, AB
๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์
๋๋ค. ์๋ฅผ ๋ค์ด, {}
์ ([])
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ฏ๋ก, {}([])
๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์
๋๋ค.๋๊ดํธ, ์ค๊ดํธ, ๊ทธ๋ฆฌ๊ณ ์๊ดํธ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด s
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด s
๋ฅผ ์ผ์ชฝ์ผ๋ก x (0 โค x < (s
์ ๊ธธ์ด)) ์นธ๋งํผ ํ์ ์์ผฐ์ ๋ s
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ๋๊ฒ ํ๋ x์ ๊ฐ์๋ฅผ return ํ๋๋ก solution
ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
s
์ ๊ธธ์ด๋ 1์ด์ 1,000 ์ดํ์
๋๋ค.s | result |
---|---|
"{}" | 3 |
"}]()[{" | 2 |
"[)(]" | 0 |
"}}}" | 0 |
"[](){}"
๋ฅผ ํ์ ์ํจ ๋ชจ์ต์ ๋ํ๋ธ ๊ฒ์
๋๋ค.x | s๋ฅผ ์ผ์ชฝ์ผ๋ก x์นธ๋งํผ ํ์ | ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด? |
---|---|---|
0 | "{}" | O |
1 | "](){}[" | X |
2 | "(){}[]" | O |
3 | "){}[](" | X |
4 | "{}" | O |
5 | "}{" | X |
"}]()[{"
๋ฅผ ํ์ ์ํจ ๋ชจ์ต์ ๋ํ๋ธ ๊ฒ์
๋๋ค.x | s๋ฅผ ์ผ์ชฝ์ผ๋ก x์นธ๋งํผ ํ์ | ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด? |
---|---|---|
0 | "}]()[{" | X |
1 | "]()[{}" | X |
2 | "()[{}]" | O |
3 | ")[{}](" | X |
4 | "{}" | O |
5 | "{}]()[" | X |
์ฐ์ , ๋ฌธ์์ด s
๋ฅผ ํ์ ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํด ๋ณด์๋ค.
s
๊ฐ ๋ง์ฝ "()[]{}"
๋ผ๋ฉด, ๊ณ ๋ คํด์ผ ํ ๋ฌธ์์ด๋ค์ ์๋์ ๊ฐ๋ค.
"()[]{}"
")[]{}("
"[]{}()"
"]{}()["
"{}()[]"
"}()[]{"
์ด๋ ๊ฒ ์ด 6๊ฐ์ง์ String์ ๋ฐ๋ณต์ ์ธ ๊ท์น์ ํตํด ๊ตฌํด์ผ ํ๋๋ฐ,
์ด ๋ substring()
๋ฉ์๋๋ฅผ ํตํด ๊ตฌํํ ์ ์์๋ค.
substring()
๋ฉ์๋๋ String ๋ฌธ์์ด์ ์ผ์ ๊ตฌ๊ฐ ์ฌ๋ผ์ด์ฑ ํด์ฃผ๋ ์ญํ ์ ํ๋๋ฐ,
๊ธฐ์กด์ ๋ฌธ์์ด s
์์ ์ธ๋ฑ์ค๋ฅผ ์ ํ์ฉํ๋ฉด ์์ ๊ฐ์ด ๋ฌธ์์ด์ ํ์ ์ํค๋ ๊ฒ์ฒ๋ผ ๊ตฌํํ ์ ์๋ค.
String str = s.substring(i, s.length()) + s.substring(0, i);
์ด๋ฐ ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ์ผ์ชฝ์ผ๋ก i
์นธ์ฉ ํ์ ํ๋ ์๋ก์ด str
๋ฅผ ๋ง๋ค ์๊ฐ ์๋ค.
์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ธ์ง ์ฒดํฌํ๊ธฐ ์ํด ๋๋ stack์ ์ฌ์ฉํ์๋ค.
๋ฌธ์์ด str
์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์ํํ๋ฉด์,
์ฌ๋ ๊ดํธ (
, {
, [
์ ๊ฒฝ์ฐ์๋ stack์ ์ ์ฅํด์ค๋ค.
๋ซ๋ ๊ดํธ )
, }
, ]
์ ๊ฒฝ์ฐ์๋ peek()
์ผ๋ก ์ด๋ฆฐ ๊ดํธ๊ฐ stack์ ๋ค์ด๊ฐ ์๋ ์ง ํ์ธ ํ, ์ง์ด ๋ง๋ ์ด๋ฆฐ ๊ดํธ๊ฐ ์๋ค๋ฉด pop()
ํด์ค๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ, stack์ด ๋น์ด์๊ฑฐ๋ peek()
ํ ๊ฒฐ๊ณผ๊ฐ ํ์ฌ ๊ดํธ๋ ์ง์ด ๋ง์ง ์๋ค๋ฉด, ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๊ฒ ๋๋ค.
์ด ๊ฒฝ์ฐ๋ฅผ ๋ง๋๋ฉด ๋ฌด์กฐ๊ฑด ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ด ์๋๊ฒ ๋๊ธฐ ๋๋ฌธ์, ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ correct
๋ณ์์๋ค๊ฐ false๋ฅผ ์ ์ฅํด ์ค๋ค.
public static int solution(String s) {
int answer = 0;
for (int i = 0; i < s.length(); i++) {
// ์คํ ์์ฑ
Stack<Character> stack = new Stack<>();
// ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ณ์
boolean correct = true;
// ํ์ ์ค ํ์ฌ ๋ฌธ์์ด
String str = s.substring(i, s.length()) + s.substring(0, i);
for (int j = 0; j < s.length(); j++) {
char temp = str.charAt(j);
switch (temp) {
case '(':
stack.push(temp);
break;
case '{':
stack.push(temp);
break;
case '[':
stack.push(temp);
break;
case ')':
if (stack.isEmpty() || stack.peek() != '(') {
correct = false;
break;
}
else {
stack.pop();
break;
}
case '}':
if (stack.isEmpty() || stack.peek() != '{') {
correct = false;
break;
}
else {
stack.pop();
break;
}
case ']':
if (stack.isEmpty() || stack.peek() != '[') {
correct = false;
break;
}
else {
stack.pop();
break;
}
}
}
// ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ
if (stack.isEmpty() && correct == true) {
answer++;
}
// stack ์ด๊ธฐํ
while (!stack.isEmpty()) {
stack.pop();
}
}
return answer;
}
์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ, correct
๋ณ์์๋ ์ฒ์์ ์ ์ฅ๋ true๊ฐ ์ ์ฅ๋์ด ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์กฐ๊ฑด๋ฌธ์ ๋ง๋ค์ด answer
์ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์์ผ ์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ , ๋ค์ str
์ ํ์ธํ๋ฌ ๊ฐ๊ธฐ ์ํด stack์ ์ด๊ธฐํํ๋ ๊ฒ๋ ์์ง ์๊ณ ํด์ฃผ์๋ค.
import java.util.Stack;
public class Solution {
static public int solution(String s) {
int answer = 0;
for (int i = 0; i < s.length(); i++) {
Stack<Character> stack = new Stack<>();
String str = s.substring(i, s.length()) + s.substring(0, i);
for (int j = 0; j < str.length(); j++) {
char c = str.charAt(j);
if (stack.isEmpty()) {
stack.push(c);
} else if (c == ')' && stack.peek() == '(') {
stack.pop();
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
} else {
stack.push(c);
}
}
if (stack.isEmpty()) {
answer++;
}
}
return answer;
}
}
์ฌ๋ ๊ดํธ์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด stack์ push()
ํด์ฃผ๋ฉด ๋๊ณ ,
๋ซ๋ ๊ดํธ์ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด peek()
๊ฐ์ด๋ ๊ฐ๋ค๋ฉด ์ฆ, ์ง์ด ๋ง๋ค๋ฉด pop()
ํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ๊ณตํต๋๋ ๋ถ๋ถ์ ์ด๋ ๊ฒ ๊ฐ๊ฒฐํ๊ฒ ์ค์ผ ์๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ , ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ผ ๊ฒฝ์ฐ stack์ ๋น์ด์๊ฒ ๋๊ณ ,
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ stack์ ์์๊ฐ ๋จ์์๊ฒ ๋๊ธฐ ๋๋ฌธ์,correct
๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ stack์ด ๋น์ด์๋ ์ง์ ๋ํ ์ฌ๋ถ๋ง์ผ๋ก๋ ์ฌ๋ฐ๋ฅธ ๋ฌธ์์ด์ธ์ง ์๋์ง ํ์
ํ ์ ์๋ค.
๋ฌด์จ ์๋ฆฐ๊ฐ ์ถ์ด ๋ฌธ์ ๋ง 30๋ฒ ์ฝ์๋ค