이 문제는 일전에 풀었었던 프로그래머스 괄호 문제 를 풀어봤던 상황이라 같은 방법으로 풀어볼까 하다가 음... 양심이 없을 듯 하여 😅 문자열 그대로 처리를 해보기로 했습니다.
일단 원리는 똑같은데, 여는 괄호 '(' 가 등장할 때마다 count 변수를 증가시켜주고, 닫는 괄호가 나올 때 count의 값이 0 이상 (닫을 게 있을 때)일 때 count를 감소시켜 줍니다.
그리고 count가 0일 경우 count의 상태 자체를 -1로 바꾸고 break를 시킨 후 해당 괄호 문자열에 대한 YES, NO 여부를 삼항연산자를 이용하여 출력해 줍니다.
const fs = require('fs'); const input = fs.readFileSync("/dev/stdin").toString().trim().split('\n'); const length = Number(input[0]); const arr = input.slice(1).map(bracket => bracket.trim()); // input의 1번째 인덱스(괄호 문자열 배열들)부터 끝까지 자르고 map으로 각 배열마다 trim으로 양쪽 공백을 잘라준 후 정리된 이중 배열을 arr에 반환 for (let i = 0; i < length; i++) { let brackets = arr[i]; // 배열 선택 let count = 0; // count 세팅 for (let j = 0; j < brackets.length; j++) { // brackets 길이만큼 for문 돌리고 const bracket = brackets[j]; // 괄호들을 꺼냄 if (bracket === '(') { // 만약 괄호가 여는 괄호라면 count 증가 count++; } else{ // 여는 괄호가 아닐 경우, 즉 닫는 괄호일 경우 if (count === 0) { // 현재 카운트의 값이 0, 즉 닫는 괄호에 대해 짝이 없을 때 count = -1; // count를 -1로 할당 후 break break; } count--; // 닫는 괄호인데 조건에 걸리지 않은 경우, 즉 count가 존재할 경우에는 count를 감소시켜 짝을 맞춰줌 } } console.log(count === 0 ? 'YES' : 'NO'); // 해당 괄호 배열에서 count가 0, 즉 짝이 다 있는 괄호들이라면 YES를, 하나라도 남겨져 있는 경우, 즉 짝이 맞지 않는 경우 NO를 출력 }