programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴
programmers.co.kr
import java.util.Stack;
class Solution {
private final Stack<String> stack = new Stack<>();
public String solution(String p) {
return this.convert(p);
}
private String convert(String s){
if (s.isEmpty()){
return "";
}
int i = 1;
String u = null;
String v = null;
while (i <= s.length()){
u = s.substring(0, i);
v = s.substring(i);
if (this.isBalancedParentheses(u)){
break;
}
i += 1;
}
if (this.isRightParentheses(u)){
return u + this.convert(v);
}else{
String ret = "(";
ret += this.convert(v);
ret += ')';
u = u.substring(1, u.length() - 1);
u = this.reverseParentheses(u);
ret += u;
return ret;
}
}
private String reverseParentheses(String u) {
String result = "";
for (int i = 0; i < u.length(); i++){
if (u.charAt(i) == '('){
result += ')';
}else{
result += '(';
}
}
return result;
}
private boolean isBalancedParentheses(String s){
int left = 0;
int right = 0;
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) == '('){
left += 1;
}else{
right += 1;
}
}
return left == right;
}
private boolean isRightParentheses(String s){
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) == '('){
this.stack.push("(");
}else{
if (stack.isEmpty()){
return false;
}else if (stack.peek().equals("(")){
stack.pop();
}
}
}
return stack.isEmpty();
}
}
'Problem-solving > 프로그래머스' 카테고리의 다른 글
프로그래머스 - (2020 카카오 인턴십) 수식 최대화 (Java) (0) | 2020.11.23 |
---|---|
프로그래머스 - (2019 카카오 개발자 겨울 인턴십) 튜플 (Java) (0) | 2020.11.23 |
프로그래머스 - (2020 KAKAO BLIND RECRUITMENT) 문자열 압축 (Java) (0) | 2020.11.23 |
프로그래머스 - (2018 KAKAO BLIND RECRUITMENT) [1차]다트 게임 (Java) (0) | 2020.11.22 |
프로그래머스 - (2019 KAKAO BLIND RECRUITMENT) 실패율 (Java) (0) | 2020.11.22 |
댓글