출처 : 프로그래머스 - 코딩테스트 연습2020 KAKAO BLIND RECRUITMENT - 괄호 변환
https://school.programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제 역시 재귀함수로 풀어야하는 문제였다. 재귀함수에 대한 이해가 부족하다보니 이 문제도 보자마자 난이도가 높다고 느꼈다.
2번 조건인 u는 "균형잡인 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수있다. 라는 부분을 제대로 이해하지 못해 1시간 내 문제를 풀지 못했다.
🔺 Solution
function solution(p) {
let answer = '';
if(p.length === 0) {
return p;
}
const [pos, correct] = check(p);
let u = p.slice(0, pos);
let v = p.slice(pos);
if (correct) {
return u + solution(v);
}
answer = '(' + solution(v) + ')';
for(let i = 1; i < u.length -1; i++) {
if(u[i] == '(') {
answer += ')';
} else {
answer += '(';
}
}
return answer;
}
function check(str) {
let correct = true;
let left = 0;
let right = 0;
const mystack = [];
for(let i = 0; i < str.length; i++) {
if(str[i] === '(') {
left++;
mystack.push('(')
} else {
right++;
if(mystack.length === 0) {
// stack에 열린 괄호가 없는 경우
correct = false;
} else {
// stack에 열린 괄호가 있는 경우
mystack.pop();
}
}
if(left === right) return [i+1, correct]
}
// 균형잡힌 괄호 문자열이 아닐 경우 대비
return 0, false
}
아래 참고란의 유튜브 해설을 보고 풀어보니 딱히 어려운 로직 없이 문제를 있는 그대로 구현해내면 되는 단순한 문제였다.
2번 조건은 짧게 말하면 짝이 맞는 괄호 단위로 나누라는 것이었다.
그 다음은 조건에 나온대로만 구현하면 되는 문제
💡correct == true 라면 올바른 괄호문자열, correct == false 라면 올바른 괄호문자열이 아니다.
참고
https://www.youtube.com/watch?v=Y-Xpiqsx8Hc&t=606s
'알고리즘' 카테고리의 다른 글
프로그래머스 JS | H-index (0) | 2022.11.05 |
---|---|
프로그래머스JS | [1차] 뉴스 클러스터링 (0) | 2022.07.29 |
백준 JS | 11729번 하노이 탑 이동 순서 (0) | 2022.07.07 |
프로그래머스 JS | 행렬 테두리 회전하기 (0) | 2022.07.06 |
프로그래머스 JS | 오픈채팅방 (0) | 2022.07.02 |