반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60058
내가 제출한 코드 및 풀이
class Solution {
public static String solution(String p) {
return repeat(p);
}
public static String repeat(String p){
if(p.isBlank()) {
return "";
}
StringBuilder sb = new StringBuilder();
String results[] = divide(p); // (1)
String u = results[0];
String v = results[1];
if(isValid(u)){ // (2)
sb.append(u).append(repeat(v));
}
else{ // (3)
sb.append("(").append(repeat(v)).append(")").append(modify(u));
}
return sb.toString();
}
private static String[] divide(String p){
String[] result = {"", ""};
boolean isValid = p.substring(0, 1).equals("(");
int count = 0;
if(isValid) {
count++;
}
else count--;
for(int i = 1; i < p.length(); i++){
if(p.substring(i, i+1).equals(")")) count--;
else count++;
if(count == 0){ // (1-1)
result[0] = p.substring(0, i+1);
result[1] = p.substring(i+1);
break;
}
}
return result;
}
private static boolean isValid(String p){
return p.startsWith("(");
}
private static String modify(String p){
p = p.substring(1);
p = p.substring(0, p.length()-1);
if(p.isEmpty()) return "";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < p.length(); i++){
if(p.charAt(i) == '(') sb.append(")");
else sb.append("(");
}
return sb.toString();
}
}
(1) 두 문자열 u, v로 분리합니다.
(1-1) 문자열이 닫히는 부분이 존재하면 거기서 문자열을 u, v로 분리한다. 이때, v는 빈 문자열이어도 상관 없음
(2) u가 올바른 괄호 문자열이면 u를 더하고 v는 다시 1부터 반복
(3) 중요
u의 앞 뒤 문자를 각 각 “(”, “)” 로 변경해주고 나머지 문자는 모두 괄호를 반대 방향으로 치환해줌
그리고 v는 다시 1부터 반복
결과
'Algorithm > Kakao' 카테고리의 다른 글
[Algorithm] 2022 KAKAO TECH INTERNSHIP 성격 유형 검사하기 (0) | 2023.07.20 |
---|---|
[Algorithm] 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 (2) | 2023.07.19 |
[Algorithm] 2020 KAKAO BLIND RECRUITMENT 문자열 압축 (0) | 2023.07.19 |