[프로그래머스] L2 괄호 변환 / 2020 카카오 블라인드 채용
[풀이]
구현이 까다로워 여러번 실패를 했지만, 주어진 조건에 맞추어 자~~알 구현하는 것이 정답이었다...
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
|
class Solution {
public static String solution(String p) {
String answer = "";
if(p.equals("")) return answer; // 1.빈문자열
else{
if(check(p)) answer = p; // p가 올바르다
else answer = solve(p); // p가 올바르지 않다
}
return answer;
}
public static String solve(String p){
if(p.equals("")) return "";
int idx = findIdx(p); // 2.u,v로 분리
String u = p.substring(0,idx);
String v = p.substring(idx,p.length());
if(check(u)){ // 3.올바른 u
return u + solve(v);
}
else { // 4.올바르지 않은 u
String str = "("+solve(v)+")"; // 4-1.~4-3
u = u.substring(1,u.length()-1);// 4-4. u의 시작, 끝 문자를 제거하고
u = makeReverse(u); // '('->')' ')'->'('
return str + u;
}
}
public static int findIdx(String p){
int sum = 0, idx = 0;
for(int i=0; i<p.length(); i++){
if(i>0 && sum==0){
idx = i;
break;
}
char c = p.charAt(i);
if(c=='(') sum += 1;
else if(c==')') sum -= 1;
}
return idx==0?p.length():idx;
}
public static boolean check(String p){
int sum = 0;
for(int i=0; i<p.length(); i++){
char c = p.charAt(i);
if(c=='(') sum += 1;
else if(c==')') sum -= 1;
if(sum<0) return false;
}
return true;
}
public static String makeReverse(String p){
char[] pArr = p.toCharArray();
for(int i=0; i<pArr.length; i++){
if(pArr[i]==')') pArr[i] = '(';
else pArr[i] = ')';
}
return String.valueOf(pArr);
}
}
|
cs |
'Problem Solving' 카테고리의 다른 글
[프로그래머스] L2 캐시 / 2018 카카오 블라인드 채용 (0) | 2020.12.15 |
---|---|
[프로그래머스] L2 스킬트리 (0) | 2020.12.15 |
[프로그래머스] L2. 오픈채팅방 / 2019 카카오 블라인드 채용 (0) | 2020.12.10 |
[프로그래머스] L2 문자열 압축 / 2020 카카오 블라인드 채용 (0) | 2020.12.09 |
[백준/BOJ] 2675 문자열 반복 JAVA (0) | 2020.07.09 |
댓글