728x90
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
문제 풀이
입력받는 문자열은 javascript 혹은 typescript에서 바로 배열로 사용할 수 있어서 순서대로 확인을 하기 위하여 for문을 통한 반복을 하였습니다.
올바른 괄호가 나오기 위해서는 '(' 여는 괄호로 시작하여 ')' 닫는 괄호로 끝나야 하므로 시작 시 닫는 괄호로 시작하는가 확인을 하여야 합니다. 또한 열고 닫는 순서로 쌓여야 하는데 여는 괄호 개수보다 닫는 괄호의 수가 많다면 짝이 맞지 않게 됩니다. 따라서 닫는 괄호가 나오면 answer를 줄이고 여는 괄호가 나오면 answer를 증가시키도록 코딩을 하였습니다. 만약 닫는 괄호가 나와 answer를 줄였는데 0보다 작아진다면 열린 괄호의 수보다 닫는 괄호의 수가 더 많아진 것이기 때문에 answer < 0이 된다면 false를 반환하도록 하였습니다.
반복이 끝나면 열고 닫힌 개수가 알맞다면 answer은 0이므로 0은 false를 의미하고 개수가 맞지 않아 answer가 0이 아니라면 true를 뜻하므로 answer를 부정하여 반환하였습니다.
function solution(s: string): boolean {
let answer: number = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] == ")") {
answer--;
if (answer < 0) {
return false;
}
} else {
answer++;
}
}
return !answer;
}
728x90