문제) 자바스크립트 괄호 ‘(‘ 짝이 맞는지 확인. ()) 는 거짓, ()()()는 참, ((())()) 이거도 참.
function is_pair(s){ //결과 초기값 true var result = true; //괄호만 넣을 빈 배열 생성 var s_arr =[]; for (var i=0; i<s.length; i++){ //문자열 s 의 ( 만 추출해서 배열에 담는다. if(s[i]=="("){ s_arr.push(s[i]); } else if(s[i]==")") { //)가 남아있는데 (가 없으므로 false 선언하고 아웃. if(s_arr.length==0){ return result = false; } //문자열 s의 ) 가 나오면 배열에서 (를 제거해서 짝이 맞는지 확인 s_arr.pop(); } } //남은 (가 있어도 false if(s_arr.length!=0){ result = false; } return result; }
이걸 응용하면 ‘(‘ 외에 [], {} 이거도 응용할 수 있다. 자바스크립트 객체를 이용하면 된다.
function is_pair(s){ //결과 초기값 true var result = true; //괄호만 넣을 빈 배열 생성 var s_arr =[]; var map = { '(':')', '[':']', '{':'}' } for (var i=0; i<s.length; i++){ //문자열 s 의 ( 만 추출해서 배열에 담는다. if(s[i]==="(" || s[i]==="[" || s[i]==="{"){ s_arr.push(s[i]); } else if(s[i]===")" || s[i]==="]" || s[i]==="}") { //닫는 괄호가 나오면 여는괄호 모아둔데 가장 바깥꺼를 s_key로 담고 지금 s[i] 와 비교 var s_key = s_arr.pop(); if(s[i]!==map[s_key]){ return false; } } } //남은 (가 있어도 false if(s_arr.length!==0){ result = false; } return result; }