문제
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public String solution(String p) {
if(check(p)) return p;
String answer = p;
answer = makeV(answer);
return answer;
}
public String makeV(String str){
if(str.equals("")) return "";
String [] arr = splitStr(str);
String u = arr[0];
String v = arr[1];
String temp = "";
if(check(u)){
temp = u + makeV(v);
}
else{
temp = "("+makeV(v)+")"+splitAndReverse(u);
}
return temp;
}
public String splitAndReverse(String str){
String temp ="";
str = str.substring(1, str.length()-1);
for(int i=0;i<str.length();i++){
if(str.charAt(i) == ')') temp+='(';
else temp += ')';
}
return temp;
}
public String [] splitStr(String str){
String [] arr = new String[2];
Stack<Character> stack = new Stack<>();
stack.push(str.charAt(0));
for(int i=1;i<str.length();i++){
if(stack.empty()){
arr[0] = str.substring(0, i);
arr[1] = str.substring(i);
stack.push(str.charAt(i));
break;
}
else if(stack.peek() == str.charAt(i)){
stack.push(str.charAt(i));
}
else stack.pop();
}
if(stack.empty()){
arr[0] = str;
arr[1] = "";
}
return arr;
}
public boolean check(String str){
Stack<Character> stack = new Stack<>();
for(int i=0;i<str.length();i++){
if(stack.empty()) {
if(str.charAt(i) != '(') return false;
stack.push(str.charAt(i));
}
else if(stack.peek() == str.charAt(i)) stack.push(str.charAt(i));
else stack.pop();
}
if(stack.empty()) return true;
return false;
}
}
문제
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*; class Solution { public String solution(String p) { if(check(p)) return p; String answer = p; answer = makeV(answer); return answer; } public String makeV(String str){ if(str.equals("")) return ""; String [] arr = splitStr(str); String u = arr[0]; String v = arr[1]; String temp = ""; if(check(u)){ temp = u + makeV(v); } else{ temp = "("+makeV(v)+")"+splitAndReverse(u); } return temp; } public String splitAndReverse(String str){ String temp =""; str = str.substring(1, str.length()-1); for(int i=0;i<str.length();i++){ if(str.charAt(i) == ')') temp+='('; else temp += ')'; } return temp; } public String [] splitStr(String str){ String [] arr = new String[2]; Stack<Character> stack = new Stack<>(); stack.push(str.charAt(0)); for(int i=1;i<str.length();i++){ if(stack.empty()){ arr[0] = str.substring(0, i); arr[1] = str.substring(i); stack.push(str.charAt(i)); break; } else if(stack.peek() == str.charAt(i)){ stack.push(str.charAt(i)); } else stack.pop(); } if(stack.empty()){ arr[0] = str; arr[1] = ""; } return arr; } public boolean check(String str){ Stack<Character> stack = new Stack<>(); for(int i=0;i<str.length();i++){ if(stack.empty()) { if(str.charAt(i) != '(') return false; stack.push(str.charAt(i)); } else if(stack.peek() == str.charAt(i)) stack.push(str.charAt(i)); else stack.pop(); } if(stack.empty()) return true; return false; } }