풀이
김영준
// 2개 붙어있는 짝 찾기 // 앞뒤로 문자열을 이어 붙임 // 위 동작을 수행할 수 있으면 1, 아니면 0을 리턴 function solution(s) { const stack = []; for(let i =0; i < s.length; i ++){ if(!stack.length || stack[stack.length-1] !== s[i]){ stack.push(s[i]); // 스택이 비어있거나, 이전 문자가 현재 문자와 다를 때 stack에 push } else{ stack.pop(); // 이전 문자열이랑 같으면 pop } } return stack.length ? 0 : 1 ; // 스택이 비어있으면 성공했다는 뜻이므로 1을 리턴, 아니면 0을 리턴 }
이종현
function solution(s){ // 스택에 이용할 빈 배열 선언 const stack = []; // 문자열 s를 반복문을 이용해 확인합니다. for (let i = 0; i < s.length; i++) { // 배열의 마지막 값과 현재 s[i]의 값을 비교하고 같지 않다면 // stack에 s[i]값을 push해줍니다. // 같다면 stack의 마지막값을 pop해줍니다. if (stack[stack.length - 1] !== s[i]) stack.push(s[i]); else stack.pop(); } // 모든 과정을 끝낸 후 stack배열의 길이를 확인하고 // 0이라면 1을 0이 아니라면 0을 return 해줍니다. // if (!stack.length) return 1; // else return 0; return !stack.length ? 1 : 0 }
박노철
function solution(s) { //문자열 안에서 같은 알파벳이 2개 붙어있는 짝을 제거, 그둘을 제거 ,이것을 문자열안에서 반복, 문자열이 모두 제거된다면 짝지어 제거 성공 //최대 길이가 1,000,000로 1번에 돌며 괜찮을것이라고 생각했지만 splice도 복잡도가 o(n)으로 실패!! // let chars=s.split(""); // let flag =true; // let idx=0; // while(flag){ // const char1=chars[idx]; // const char2=chars[idx+1]; // if(char1=== char2){ // chars.splice(idx, 2); //splice시간복잡도 o(n)으로 idx까지 가야한다. // if(idx!==0)idx--; // }else{ // idx++; // } // if(idx===chars.length || chars.length===0)flag= false; // } // return chars.length===0 ? 1: 0 // 효율성 테스트x____________________________________ const stack=[]; for(let a of s){ if(stack[stack.length-1]===a)stack.pop(); else stack.push(a); } return stack.length===0? 1:0 }
이민희
// 효율성테스트 하나 빼고 다 통과 못했어요.. // 지금은 스택을 써야겠다는 생각을 떠올리기가 쉽지 않은데, 많이 풀고 데이터가 쌓이다보면 떠오르겠죠 ?! function splicePairs(str) { for (let i = 0; i < str.length; i++) { if (str[i] === str[i + 1]) { str = str.replace(str.substring(i, i + 2), ''); break; } } return str; } function solution(s) { let currentString = s; let result = 0; while (true) { const newString = splicePairs(currentString); if (currentString.length === newString.length) { break; } else if (newString === '') { result = 1; break; } currentString = newString; } return result; }
박건우
function solution(s){ const stack = []; [...s].forEach(c => { if(stack[stack.length - 1] === c){ stack.pop(); }else{ stack.push(c); } }) return (!stack.length ? 1 : 0); } // 스택으로 풀었습니다! // O(N)으로 풀 수 있습니다. // 스택을 떠올릴 수 있느냐를 묻는 문제 같아요. // 저는 한번 풀어봐서 이미 알고는 있었습니다..
박주연
//재귀로 풀려고 하다가 메모리 초과로 실패하고 건우님께 힌트받아서 스택으로 풀어봤습니다 //스택의 top이랑 계속 비교해서 pop해주는 방식입니다! function solution(s) { const stack = []; for(let i of s){ if(stack[stack.length -1] === i){ stack.pop(); }else{ stack.push(i); } } return stack.length ? 0: 1; }