๐ป
[ํ๋ก๊ทธ๋๋จธ์ค][2020 KAKAO ๋ธ๋ผ์ธ๋ ์ฑ์ฉ] ๊ดํธ๋ณํ ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค][2020 KAKAO ๋ธ๋ผ์ธ๋ ์ฑ์ฉ] ๊ดํธ๋ณํ
๋ํจ๋ 2020. 4. 11. 18:59๋ฌธ์ ์ค๋ช
์นด์นด์ค์ ์ ์
๊ฐ๋ฐ์๋ก ์
์ฌํ ์ฝ์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ก๋ถํฐ ๊ฐ๋ฐ์ญ๋ ๊ฐํ๋ฅผ ์ํด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ผ๋ ์
๋ฌด ๊ณผ์ ๋ฅผ ๋ฐ์์ต๋๋ค. ์์ค๋ฅผ ์ปดํ์ผํ์ฌ ๋ก๊ทธ๋ฅผ ๋ณด๋ ๋๋ถ๋ถ ์์ค ์ฝ๋ ๋ด ์์ฑ๋ ๊ดํธ๊ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ง์ด ๋ง์ง ์์ ํํ๋ก ์์ฑ๋์ด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์์ ํด์ผ ํ ์์ค ํ์ผ์ด ๋๋ฌด ๋ง์์ ๊ณ ๋ฏผํ๋ ์ฝ์ ์์ค ์ฝ๋์ ์์ฑ๋ ๋ชจ๋ ๊ดํธ๋ฅผ ๋ฝ์์ ์ฌ๋ฐ๋ฅธ ์์๋๋ก ๋ฐฐ์น๋ ๊ดํธ ๋ฌธ์์ด์ ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฐํ๋ ค๊ณ ํฉ๋๋ค.
์ฉ์ด์ ์ ์
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์์ ๊ฒฝ์ฐ, '(' ์ ๊ฐ์์ ')' ์ ๊ฐ์๊ฐ ๊ฐ๋ค๋ฉด ์ด๋ฅผ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ '('์ ')'์ ๊ดํธ์ ์ง๋ ๋ชจ๋ ๋ง์ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์๋ฅผ ๋ค์ด, "(()))("์ ๊ฐ์ ๋ฌธ์์ด์ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด ์ด์ง๋ง ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ์๋๋๋ค.
๋ฐ๋ฉด์ "(())()"์ ๊ฐ์ ๋ฌธ์์ด์ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด ์ด๋ฉด์ ๋์์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ์
๋๋ค.
'(' ์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด 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 ํ๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์
presult
"(()())()" | "(()())()" |
")(" | "()" |
"()))((()" | "()(())()" |
์ ์ถ๋ ฅ ์์ ๋ํ ์ค๋ช
์
์ถ๋ ฅ ์ #1
์ด๋ฏธ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ์
๋๋ค.
์ ์ถ๋ ฅ ์ #2
- ๋ ๋ฌธ์์ด u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- u = ")("
- v = ""
- u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋ญ๋๋ค.
- v์ ๋ํด 1๋จ๊ณ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ฉด ๋น ๋ฌธ์์ด์ด ๋ฐํ๋ฉ๋๋ค.
- u์ ์๋ค ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๋จธ์ง ๋ฌธ์์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ผ๋ฉด ""์ด ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ์์ฑ๋๋ ๋ฌธ์์ด์ "(" + "" + ")" + ""์ด๋ฉฐ, ์ต์ข ์ ์ผ๋ก "()"๋ก ๋ณํ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- ๋ ๋ฌธ์์ด u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- u = "()"
- v = "))((()"
- ๋ฌธ์์ด u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ฏ๋ก ๊ทธ๋๋ก ๋๊ณ , v์ ๋ํด ์ฌ๊ท์ ์ผ๋ก ์ํํฉ๋๋ค.
- ๋ค์ ๋ ๋ฌธ์์ด u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- u = "))(("
- v = "()"
- u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋ญ๋๋ค.
- v์ ๋ํด 1๋จ๊ณ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ฉด "()"์ด ๋ฐํ๋ฉ๋๋ค.
- u์ ์๋ค ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๋จธ์ง ๋ฌธ์์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ผ๋ฉด "()"์ด ๋ฉ๋๋ค.
- ๋ฐ๋ผ์ ์์ฑ๋๋ ๋ฌธ์์ด์ "(" + "()" + ")" + "()"์ด๋ฉฐ, ์ต์ข ์ ์ผ๋ก "(())()"๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฒ์์ ๊ทธ๋๋ก ๋ ๋ฌธ์์ด์ ๋ฐํ๋ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ด๋ฉด "()" + "(())()" = "()(())()"๊ฐ ๋ฉ๋๋ค.
[์ถ์ฒ]
https://programmers.co.kr/learn/courses/30/lessons/60058
์๊ฐ
๋ฌธ์ ๊ฐ ๊ธธ์ด์ ์ซ์๋๋ฐ ์น์ ํ ๋ฌธ์ ์๋ค.
์ด์ ์ ๋ฐฑ์ค์์ ํ์๋ 9012. ๊ดํธ(https://www.acmicpc.net/problem/9012) ๋ฌธ์ ๋ ๋น์ทํ ๋๋์ ๋ฐ์๋ค. ๋ฐฑ์ค๋ฌธ์ ๋ณด๋ค๋ ์กฐ๊ธ ๋์ด๋๊ฐ ์์ง๋ง ์ฉ์ด์ ์ ์์ ์ฐ์ฌ์๋ ์์๋ฅผ ์ฐธ๊ณ ๋ก ํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ ๋ฌธ์ ๋ค.
์์ฑํ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#include <string>
#include <vector>
#include <stack>
using namespace std;
bool check(string p){
stack<char> s;
for(int i=0; i<p.size(); i++){
if(p[i] == '('){
s.push(p[i]);
}else{
if(!s.empty()){
s.pop();
}else{
return false;
}
}
}
if(!s.empty()){
return false;
}else{
return true;
}
}
string solution(string p) {
string answer = "";
string u,v;
int left = 0, right = 0;
// 1.
if(p == ""){
return "";
}
// 2.
for(int i=0; i<p.size(); i++){
if(p[i] == '('){
left++;
}else{
right++;
}
if(left == right){ // ์ง์ด ๋ง์ผ๋ฉด
u = p.substr(0, left+right);
v = p.substr(left+right, p.size()-(left+right));
break;
}
}
//3.
if(check(u)){
u+=solution(v);
answer+=u;
}
//4.
else{
string s = "";
s.append("(");
s+=solution(v);
s.append(")");
u = u.substr(1, u.size()-2);
for(int i=0; i<u.size(); i++){
if(u[i] == '('){
s+=')';
}else{
s+='(';
}
}
answer = s;
}
return answer;
}
Colored by Color Scripter
|
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง - ์ฟผ๋์์ถ ํ ๊ฐ์ ์ธ๊ธฐ (0) | 2020.10.21 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ] ๋คํธ ๊ฒ์ (0) | 2020.05.07 |
[ํ๋ก๊ทธ๋๋จธ์ค][2019 KAKAO ๋ธ๋ผ์ธ๋ ์ฑ์ฉ] ์คํจ์จ (0) | 2020.04.11 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ฅ (0) | 2020.04.11 |