🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60058
✏️ 풀이
function solution(p) {
// 균형잡힌 괄호 문자열 판독
const checkBalance = (w) => {
let balance = 0;
for (const str of w) {
if (str === '(') {
balance++;
} else {
balance--;
}
if (balance < 0) {
return false;
}
}
return true;
};
// 괄호 모양 뒤집기
const reversed = (w) => {
const output = [];
for (const str of w) {
if (str === '(') {
output.push(')');
} else {
output.push('(');
}
}
return output.join('');
};
const solve = (w) => {
if (!w) {
return '';
}
// w를 앞에서부터 순회하면서 가장 짧은 균형잡힌 괄호 문자열 찾기
let i = 0;
let j = 0;
while (i < w.length) {
if (w[i] === '(') {
j++;
} else {
j--;
}
if (!j) {
break;
}
i++;
}
const u = w.slice(0, i + 1); // 균형잡힌 괄호 문자열
const v = w.slice(i + 1); // 나머지
// u가 올바른 괄호 문자열일 때
if (checkBalance(u)) {
return u + solve(v);
}
// u가 올바른 괄호 문자열이 아닐 때
return `(${solve(v)})${reversed(u.slice(1, -1))}`;
};
return solve(p);
}
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 2] 행렬 테두리 회전하기 - JavaScript (0) | 2022.09.16 |
---|---|
[프로그래머스 Level 2] 수식 최대화 - JavaScript (0) | 2022.09.16 |
[프로그래머스 Level 2] 메뉴 리뉴얼 - JavaScript (0) | 2022.09.15 |
[프로그래머스 Level 2] 튜플 - JavaScript (0) | 2022.09.15 |
[프로그래머스 Level 2] 주차 요금 계산 - JavaScript (0) | 2022.09.15 |