본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 괄호 변환

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

올바르지 않은 괄호를 올바르게 만드는 문제

for (int i = 0; i < p.length(); i++) {
u.append(p.charAt(i));
int a = 0;
int b = 0;
for (int j = 0; j < u.length(); j++) {
if (u.charAt(j) == '(') {
a++;
} else {
b++;
}
}
if (a == b) {
break;
}
}

일단 괄호의 개수가 알맞는지를 확인

public boolean check(String p) {
int number = 0;
for (int i = 0; i < p.length(); i++) {
if (p.charAt(i) == '(') number++;
else number--;
if (number < 0) {
return false;
}
}
return true;
}

괄호가 올바르게 있는지를 체크

if (check(u.toString())) {
u.append(solution(v.toString()));
return u.toString();
} else {
sb.append("(");
sb.append(solution(v.toString()));
sb.append(")");
for (int i = 1; i < u.length() - 1; i++) {
if (u.charAt(i) == '(') {
sb.append(")");
} else {
sb.append("(");
}
}
}
return sb.toString();

false라면 괄호를 올바르게 바꾸어주기

class Solution {
public String solution(String p) {
StringBuilder sb = new StringBuilder();
StringBuilder u = new StringBuilder();
if (p.length() == 0) {
return p;
}
for (int i = 0; i < p.length(); i++) {
u.append(p.charAt(i));
int a = 0;
int b = 0;
for (int j = 0; j < u.length(); j++) {
if (u.charAt(j) == '(') {
a++;
} else {
b++;
}
}
if (a == b) {
break;
}
}
StringBuilder v = new StringBuilder(p.substring(u.length()));
if (check(u.toString())) {
u.append(solution(v.toString()));
return u.toString();
} else {
sb.append("(");
sb.append(solution(v.toString()));
sb.append(")");
for (int i = 1; i < u.length() - 1; i++) {
if (u.charAt(i) == '(') {
sb.append(")");
} else {
sb.append("(");
}
}
}
return sb.toString();
}
public boolean check(String p) {
int number = 0;
for (int i = 0; i < p.length(); i++) {
if (p.charAt(i) == '(') number++;
else number--;
if (number < 0) {
return false;
}
}
return true;
}
}