프로그래머스 : 괄호 변환
https://programmers.co.kr/learn/courses/30/lessons/60058
문제풀이
이번 문제는 2020 카카오 블라인드 채용에 나왔던 문제입니다. 프로그래머스 2단계 연습문제에 있네요!
해당 문제는 지문에 적혀있는 문제 풀이의 순서를 그대로 코드로 입력하면 해결 할 수 있습니다.
제가 풀었던 코드는 더 짧았지만 포스팅을 위해서 단계별로 나누어 주석으로 적어두었습니다 ㅎㅎ
코드
function solution(p) {
if(p === "") return p; // 1단계
let u = '', v = '', left = 0, right = 0;
for(let i = 0; i<p.length; i++){
p[i] === '(' ? left ++ : right ++;
if(left === right){ // 2단계
u = p.slice(0, i+1); // 균형잡힌 문자열 u
v = p.slice(i+1, p.length); // 나머지 문자열 v
if(checkRightString(u)) // 3단계
return u + solution(v); // 3-1단계
else{ // 4단계
let answer = '('; // 4-1단계
answer += solution(v); // 4-2단계
answer += ')'; // 4-3단계
answer += u.slice(1, u.length-1).split('').map(elem => elem === '(' ? ')' : '(').join('');
// 4-4단계
return answer // 4-5단계
}
}
}
}
function checkRightString(str){
// 올바른 문자열 체크를 위한 함수
const stack = [];
for(let i of str){
if(i === '(') stack.push(i); // '('는 스택에 넣고
else{
// ')'일때 스택이 비어있다면 return false
if(stack.length <= 0){
return false
}
// 아니라면 스택 요소 하나를 pop
else stack.pop();
}
}
return true;
}
리뷰
한동안 프로젝트로 바빠서 코딩테스트 문제를 안풀다 보니, 처음에 조금 헤매었는데 지문만 꼼꼼히 읽는다면 그렇게 어려운 문제는 아니었던 것 같습니다.
처음에 '균형잡힌 괄호 문자열' 이라는 말이 대칭이라는 뜻인가 헷갈렸는데, 단순히 왼쪽 오른쪽 괄호의 수가 맞아떨어지는 순간이었습니다 ㅜ
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
스킬트리 / js 풀이 (0) | 2021.08.31 |
---|---|
[1차] 뉴스 클러스터링 / js 풀이 (0) | 2021.08.31 |
프린터 / js 풀이 (0) | 2021.08.06 |
튜플 / js 풀이 (0) | 2021.08.02 |
네트워크 / js 풀이 (0) | 2021.07.26 |