원본 : https://programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
풀이
class Solution {
public String solution(String p) {
return fn(p);
}
public String fn (String str) {
if (str.isEmpty()) {
return "";
}
String[] arr = balance(str);
String u = arr[0];
String v = arr[1];
if (isComplete(u)) {
return u + fn(v);
} else {
StringBuilder sb = new StringBuilder();
sb.append("(");
sb.append(fn(v));
sb.append(")");
u = u.substring(1, u.length() - 1);
for (char chu : u.toCharArray()) {
if (chu == '(') {
sb.append(")");
} else {
sb.append("(");
}
}
return sb.toString();
}
}
public String[] balance(String str) {
int cnt = 0;
boolean flag = true;
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
for (char ch : str.toCharArray()) {
if (ch == str.charAt(0)) {
cnt++;
} else {
cnt--;
}
if (flag) {
sb1.append(ch);
} else {
sb2.append(ch);
}
if (flag && cnt == 0) {
flag = false;
}
}
return new String[]{sb1.toString(), sb2.toString()};
}
public boolean isComplete(String str) {
int cnt = 0;
for (char ch : str.toCharArray()) {
if (ch == '(') {
cnt++;
} else {
cnt--;
}
if (cnt < 0) {
return false;
}
}
return true;
}
}
거리두기 확인하기 (2021 카카오 채용연계형 인턴십) (0) | 2022.07.04 |
---|---|
뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT[1차]) (0) | 2022.07.04 |
메뉴 리뉴얼 (2021 KAKAO BLIND RECRUITMENT) (0) | 2022.07.04 |
행렬 테두리 회전하기 (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) (0) | 2022.07.01 |
짝지어 제거하기 (2017 팁스타운) (0) | 2022.07.01 |
댓글 영역