괄호가 바르게 짝지어졌다는 것은 '('
문자로 열렸으면 반드시 짝지어서 ')'
문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()"
또는 "(())()"
는 올바른 괄호입니다.")()("
또는 "(()("
는 올바르지 않은 괄호입니다.'('
또는 ')'
로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
'('
또는 ')'
로만 이루어져 있습니다.s | answer |
---|---|
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
const solution = s => {
let result = 0;
const sArr = s.split("");
sArr.map(x => {
if(result < 0) return;
return x === "(" ? result += 1 : result -= 1;
})
return result ? false : true
}
/*
내가 처음 작성한 코드이다.
1. result 변수는 짝이 맞는 괄호를 확인하기 위한 카운터로 사용되는 변수이다. 0 으로 초기화한다.
2. s.split("")을 통해 입력된 문자열 s를 문자 단위로 분리하여 배열 sArr에 저장한다.
3. map을 통해서 배열 sArr의 각 원소를 순회하며 괄호의 짝을 확인한다.
4. 만약 result 값이 음수가 되면 함수는 더 이상 계산을 진행하지 않는다.
이는 닫는 괄호가 여는 괄호보다 많아 괄호의 짝이 맞지 않음을 의미한다.
5. 현재 원소가 여는 괄호 (인 경우 result를 1 증가시키고, 닫는 괄호 )인 경우 result를 1 감소시킨다.
6. 만약 result가 0이 아니라면 (즉, 괄호의 짝이 완벽하게 맞지 않으면), false를 반환하고
result가 0이라면 (모든 괄호의 짝이 맞다면), true를 반환한다.
*/
const solution = s => {
let result = 0;
for (let i=0; i<s.length; i++) {
s[i] === "(" ? result += 1 : result -= 1
if (result < 0) {
break;
}
}
return result ? false : true;
}
/*
명령형으로 작성해보았다.
1. result 변수는 짝이 맞는 괄호를 확인하기 위한 카운터로 사용되는 변수이다. 0 으로 초기화한다.
2. for문을 통해 문자열 s의 각 문자에 대해 반복한다.
3. 현재 문자가 여는 괄호 (이면 result를 1 증가시키고, 닫는 괄호 )이면 result를 1 감소시킨다.
4. result가 음수가 되면 루프를 즉시 중단한다. 이는 닫는 괄호가 여는 괄호보다 더 많아
괄호의 짝이 맞지 않음을 의미한다.
5. result가 0이 아니면 false를 반환하고, 0이면 true를 반환한다.
*/