728x90
문제 설명
문제 풀이 방법
- 이 문제는 stack을 사용하며 괄호가 올바른지 확인하며 풀이했다. 또한 재귀 방식을 이용해 풀었다.
- 우선 주어지는 괄호 문자열의 (와 )의 갯수가 같아질 때를 찾아 u와 v로 나눈다.
- 그리고 나누어진 문자열이 올바른 괄호 문자열인지 확인하는 함수를 작성한다.
이 함수는 stack을 이용해 괄호 문자열이 제대로된 쌍을 갖는지 확인한 뒤 불리언 값을 반환한다. - check 함수를 이용해 올바른지 여부를 확인 후 올바르 않다면 문제의 조건을 보며 코드를 작성한다.
코드
function solution(p) {
// ()문자열을 올바른 괄호 문자열로 변환해주는 함수
// 빈 문자열이 들어오면 빈 문자열을 반환,
// 올바른 괄호문자열이 들어오면 그대로 반환,
// 올바르지 않은 괄호 문자열이 들어오면 맨 앞과 맨 뒤 괄호를 없앤뒤
// 나머지 괄호의 방향을 바꾼뒤 ['(' + v + ')' + 바꾼 괄호 ]의 순서로 결합해서 반환
const func = (w) => {
let cnt = 0;
let answer = '';
if(!w) {
return ""
};
for(let i=0; i<w.length; i++){
if(w[i] === '(') {
cnt ++;
}
else{
cnt--;
}
if(cnt === 0){
if(check(w.slice(0, i+1))){
answer = w.slice(0, i+1) + func(w.slice(i+1));
return answer;
}
else{
answer = '(' + func(w.slice(i+1)) + ')';
for(let j=1; j<i; j++){
if(w[j] === '(') {
answer = answer + ')';
}
else {
answer = answer + '(';
}
}
}
return answer
}
}
}
return func(p);
}
const check = (string) => {
let stack = [];
for(let i = 0; i<string.length; i++){
if(string[i] === '('){
stack.push(string[i])
}
else{
if(stack.length === 0){
return false;
}
stack.pop();
}
}
return true;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 연습문제 / 멀리 뛰기 (0) | 2023.06.26 |
---|---|
[JS] 2Level / 깊이/너비 우선 탐색(DFS/BFS) / 게임 맵 최단거리 (0) | 2023.06.24 |
[JS] 2Level / 2022 KAKAO BLIND RECRUITMENT / k진수에서 소수 개수 구하기 (0) | 2023.06.11 |
[JS] 2Level / 월간 코드 챌린지 시즌3 / n^2 배열 자르기 (0) | 2023.06.11 |
[JS] 힌트 2Level / 완전탐색 / 피로도 (0) | 2023.06.09 |