https://school.programmers.co.kr/learn/courses/30/lessons/60058
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๋ฌธ์ ์ค๋ช
์นด์นด์ค์ ์ ์
๊ฐ๋ฐ์๋ก ์
์ฌํ "์ฝ"์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ก๋ถํฐ ๊ฐ๋ฐ์ญ๋ ๊ฐํ๋ฅผ ์ํด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ผ๋ ์
๋ฌด ๊ณผ์ ๋ฅผ ๋ฐ์์ต๋๋ค. ์์ค๋ฅผ ์ปดํ์ผํ์ฌ ๋ก๊ทธ๋ฅผ ๋ณด๋ ๋๋ถ๋ถ ์์ค ์ฝ๋ ๋ด ์์ฑ๋ ๊ดํธ๊ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ง์ด ๋ง์ง ์์ ํํ๋ก ์์ฑ๋์ด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์์ ํด์ผ ํ ์์ค ํ์ผ์ด ๋๋ฌด ๋ง์์ ๊ณ ๋ฏผํ๋ "์ฝ"์ ์์ค ์ฝ๋์ ์์ฑ๋ ๋ชจ๋ ๊ดํธ๋ฅผ ๋ฝ์์ ์ฌ๋ฐ๋ฅธ ์์๋๋ก ๋ฐฐ์น๋ ๊ดํธ ๋ฌธ์์ด์ ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฐํ๋ ค๊ณ ํฉ๋๋ค.
์ฉ์ด์ ์ ์
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์์ ๊ฒฝ์ฐ, '(' ์ ๊ฐ์์ ')' ์ ๊ฐ์๊ฐ ๊ฐ๋ค๋ฉด ์ด๋ฅผ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ '('์ ')'์ ๊ดํธ์ ์ง๋ ๋ชจ๋ ๋ง์ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์๋ฅผ ๋ค์ด, "(()))("์ ๊ฐ์ ๋ฌธ์์ด์ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" ์ด์ง๋ง "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ ์๋๋๋ค.
๋ฐ๋ฉด์ "(())()"์ ๊ฐ์ ๋ฌธ์์ด์ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" ์ด๋ฉด์ ๋์์ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด" ์
๋๋ค.
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด w๊ฐ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ ํตํด "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"๋ก ๋ณํํ ์ ์์ต๋๋ค.
1. ์
๋ ฅ์ด ๋น ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ, ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
2. ๋ฌธ์์ด w๋ฅผ ๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๋จ, u๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด"๋ก ๋ ์ด์ ๋ถ๋ฆฌํ ์ ์์ด์ผ ํ๋ฉฐ, v๋ ๋น ๋ฌธ์์ด์ด ๋ ์ ์์ต๋๋ค.
3. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด" ์ด๋ผ๋ฉด ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ๋ค์ ์ํํฉ๋๋ค.
3-1. ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ u์ ์ด์ด ๋ถ์ธ ํ ๋ฐํํฉ๋๋ค.
4. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ด ์๋๋ผ๋ฉด ์๋ ๊ณผ์ ์ ์ํํฉ๋๋ค.
4-1. ๋น ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ก '('๋ฅผ ๋ถ์
๋๋ค.
4-2. ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์ด์ด ๋ถ์
๋๋ค.
4-3. ')'๋ฅผ ๋ค์ ๋ถ์
๋๋ค.
4-4. u์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๋จธ์ง ๋ฌธ์์ด์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ด์ ๋ค์ ๋ถ์
๋๋ค.
4-5. ์์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
"๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" p๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ฃผ์ด์ง ์๊ณ ๋ฆฌ์ฆ์ ์ํํด "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
๋งค๊ฐ๋ณ์ ์ค๋ช
- p๋ '(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด๋ฉฐ ๊ธธ์ด๋ 2 ์ด์ 1,000 ์ดํ์ธ ์ง์์ ๋๋ค.
- ๋ฌธ์์ด p๋ฅผ ์ด๋ฃจ๋ '(' ์ ')' ์ ๊ฐ์๋ ํญ์ ๊ฐ์ต๋๋ค.
- ๋ง์ฝ p๊ฐ ์ด๋ฏธ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ด๋ผ๋ฉด ๊ทธ๋๋ก return ํ๋ฉด ๋ฉ๋๋ค.
ํ์ด
๋ฌธ์ ์ ์๋ ํ์ด ๊ณผ์ ์ ๊ทธ๋๋ก ๋ฐ๋ผํด๋ณด์๋ค.
์ฌ๊ทํธ์ถ๊ณผ ์คํ์ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
package Programmers;
import java.util.Stack;
public class ParenthesisConversion {
static int divisor;
public String solution(String p) {
if (p.equals("")) {
return p;
}
boolean right = isCorrect(p);
// u,v๋ก ๋ถ๋ฆฌ.
String u = p.substring(0, divisor);
String v = p.substring(divisor);
// ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด 3. ์ํ
if (right) {
return u + solution(v);
}
// ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด 4. ์ํ
StringBuilder answer = new StringBuilder("(" + solution(v) + ")");
for (int i = 1; i < u.length() - 1; i++) {
if (u.charAt(i) == '(') {
answer.append(")");
} else answer.append("(");
}
return answer.toString();
}
// ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ธ์ง ํ๋ณ.
public boolean isCorrect(String p) {
Stack<Character> st = new Stack<>();
boolean right = true;
int open = 0;
int close = 0;
for (int i = 0; i < p.length(); i++) {
if (p.charAt(i) == '(') {
open++;
st.push('(');
} else {
close++;
if (!st.isEmpty()) {
st.pop();
} else {
right = false;
}
}
if (open == close) {
divisor = i + 1;
return right;
}
}
return right;
}
'๐ Algorithm > ์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Set & List] ์ฑ๋ฅ ์ฐจ์ด (0) | 2022.10.29 |
---|---|
2022.06.27 ใLV.2 ํ๋ ธ์ด์ ํใ (0) | 2022.06.27 |
2022.06.22 ใLv.2 Jadan Caseใ (0) | 2022.06.22 |
2022.06.22 ใLv.2 N-Queenใ (0) | 2022.06.22 |
2022.06.15 ใLv.2 ์คํ์ฑํ ๋ฐฉใ (0) | 2022.06.15 |