2021.09.17
문제명 : 2020 KAKAO BLIND RECRUITMENT 괄호 변환
사용언어 : Javascript
개발 시간 : 120분
📋 문제 설명
- 균형잡힌 괄호 문자열 = '(' 의 개수와 ')' 의 개수가 같은 경우
- 올바른 괄호 문자열 = '('와 ')'의 괄호의 짝도 모두 맞을 경우
예 : (()))( → 균형잡힌 괄호 문자열
예 : (())() → 균형잡힌 괄호 문자열, 올바른 괄호 문자열
📢 입출력 예
새로운 예로 ' )()()()( ' 를 들어보겠습니다
주어진 단계를 순차적으로 따라가면 빨간색으로 표시한 부분을 모두 연결한 ' (((()))) ' 이 됩니다
🔑 문제 풀이
function solution(p) {
var answer = '';
answer = revision(p);
return answer;
}
function revision(str){
var res = '';
var u = '';
var v = '';
var left = 0;
var right = 0;
var check = '';
// 1.
if(str == ""){
return "";
}else{
// 2.
for(var i=0; i<str.length; i++){
if(str[i] == '('){
left++;
}else if(str[i] == ')'){
right++;
}
if(left == right){
u = str.substring(0,i+1);
v = str.substring(i+1);
break;
}
}
// 3.
check = right_check(u);
if(check == 'T'){
// 3-1.
u += revision(v);
return u;
}else if(check == 'F'){ // 4.
// 4-1.
res += '(';
// 4-2.
res += revision(v);
// 4-3.
res += ')';
// 4-4.
u = u.substring(1,u.length-1);
var r = '';
for(var i=0;i<u.length;i++){
if(u[i] == '('){
r += ')';
}else{
r += '(';
}
}
res += r;
return res;
}
}
}
// 올바른 괄호 문자열인지 확인
function right_check(s){
for(var j=0; j<s.length; j++){
if(s == '()'){
return 'T';
}else{
if(s[0] == ')'){
return 'F';
}else{
if(s[j] == ')'){
s = s.substring(0,j-1) + s.substring(j+1);
if(s.length == 2){
if(s == ')('){ // 올바르지 않음
return 'F';
}else if(s == '()'){ // 올바름
return "T";
}
}else{
return right_check(s);
}
}
}
}
}
}
🔔 새로 알게 된 점
끝없는 재귀 함수의 연속이었다..
이미 1~4단계까지 주어진 로직이 있어서 따라가기만 하면 됐다
다음번엔 시간을 단축시켜서 풀 수 있도록 해야겠다
'Programmers > Javascript' 카테고리의 다른 글
[프로그래머스] 순위 검색 javascript ⭐ (0) | 2021.08.17 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 javascript (2) | 2021.07.29 |
[프로그래머스] 신규 아이디 추천 javascript (1) | 2021.07.17 |
[프로그래머스] 로또의 최고 순위와 최저 순위 javascript (0) | 2021.07.14 |
[프로그래머스] 키패드 누르기 javascript (0) | 2021.06.26 |