문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 핵심
1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다.
2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다.
3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다.
3-1. 수행한 결과 문자열을 u에 이어 붙인 후 반환합니다.
4. 문자열 u가 "올바른 괄호 문자열"이 아니라면 아래 과정을 수행합니다.
4-1. 빈 문자열에 첫 번째 문자로 '('를 붙입니다.
4-2. 문자열 v에 대해 1단계부터 재귀적으로 수행한 결과 문자열을 이어 붙입니다.
4-3. ')'를 다시 붙입니다.
4-4. u의 첫 번째와 마지막 문자를 제거하고, 나머지 문자열의 괄호 방향을 뒤집어서 뒤에 붙입니다.
4-5. 생성된 문자열을 반환합니다.
알고리즘
문제 자체가 알고리즘
코드
public static String solution(String p) {
if(p.isEmpty()){
return "";
}
String answer = "";
String[] uv = getuv(p);
String u = uv[0];
String v = uv[1];
System.out.println("u: " + u + " v: " + v);
if (check(u)) {
answer = u + solution(v);
} else {
answer = "(" + solution(v) + ")";
u = u.substring(1, u.length() - 1);
for (char c : u.toCharArray()) {
if (c == '(') {
answer += ")";
} else {
answer += "(";
}
}
}
return answer;
}
public static String[] getuv(String p) {
int sum = 0;
char[] chars = p.toCharArray();
String u = "";
for (char c : chars) {
u += c;
if (c == '(') {
sum++;
} else {
sum--;
}
if (sum == 0) {
break;
}
}
return new String[] { u, p.substring(u.length()) };
}
public static boolean check(String s) {
boolean answer = true;
int sum = 0;
if (s.charAt(0) == ')' || s.charAt(s.length() - 1) == '(') {
return false;
}
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int n = 1;
if (c == ')') {
n = -1;
}
sum += n;
if (sum == -1) {
return false;
}
}
if (sum != 0) {
answer = false;
}
return answer;
}
결과

gpt피드백
1. 알고리즘 평가
개선 1. getuv()에서 문자열을 계속 이어 붙이지 말고 인덱스로 분리하기
개선 2. 괄호 검사 함수에서 불필요한 조건 제거하기
2. 코드 평가
개선 1. 문자열 누적에 StringBuilder 사용하기
개선 2. 삼항 연산자로 단순화하기
후기
문제알고리즘은 대놓고 알려줘서 쉬웠고
다만 문제이해하기가 힘들었다
'코테 > lvl2' 카테고리의 다른 글
| 프로그래머스 행렬 테두리 회전하기(lvl2) 풀어보기 (0) | 2026.10.20 |
|---|---|
| 프로그래머스 귤고르기(lvl2) 풀어보기 (0) | 2026.10.19 |
| 프로그래머스 의상(lvl2)풀어보기 (0) | 2026.10.16 |
| 프로그래머스 점프와 순간 이동(lvl2) 풀어보기 (0) | 2026.10.16 |
| 프로그래머스 스킬트리(lvl2) 풀어보기 (0) | 2026.10.16 |