원래 정석은 스택
재귀 함수로 해결했다.
() 하나의 완성된 괄호를 계속해서 제거해 나가다 모두 제거되면 참 아니면 거짓 리턴 하도록
스택으로 다시 해결해보기
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
public bool checklist(List<char> list){
int i = 0;
bool check = false;
if(list.Count == 1)
return false;
while(i<list.Count-1){
if(list[i] == '(' && list[i+1] == ')'){
list.RemoveAt(i+1);
list.RemoveAt(i);
check = true;
}
i++;
}
if(check == false)
return false;
if(list.Count == 0)
return true;
else
return checklist(list);
}
public bool solution(string s) {
bool answer = true;
char[] arr = s.ToCharArray();
List<char> list = new List<char>();
list.AddRange(s);
//checklist(list);
//계속해서 ()가 붙어있는 경우를 제거해서 0이된다면 true
//아니면 false
return checklist(list);
}
}
stack과 javascript로 다시 풀기
이번엔 괄호가 소 중 대 모두 포함
// 지시사항을 참고하여 solution 함수 안에 코드를 작성하세요.
function solution(string) {
var arr = [];
var str = '';
var cons_str="(){}[]"
var cons = ["()", "{}", "[]"];
for(var i = 0 ; i< string.length; i++){
var s = string.charAt(i);
if(cons_str.includes(s)){
str += s;
arr.push(s);
console.log(arr.join());
if(arr.length >1){
for(var j = 0; j<cons.length; j++){
if(arr[arr.length-2]+arr[arr.length-1] == cons[j])
{
arr.pop();
arr.pop();
break;
}
}
}
}
}
if(arr.length == 0){
return "정상";
}
else{
return "비정상";
}
}