괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어:
문자열 s
가 주어졌을 때, 문자열 s
가 올바른 괄호이면 true
를 반환하고, 그렇지 않으면 false
를 반환하는 함수를 작성해야 합니다.
s
의 길이: 100,000 이하의 자연수s
는 '(' 또는 ')'로만 이루어져 있습니다.s = "()()"
-> true
s = "(())()"
-> true
s = ")()("
-> false
s = "(()("
-> false
function solution(s){
var answer = true;
let tempArr = [...s];
let length = tempArr.length;
let last = '';
let first = '';
console.log(tempArr);
for (let i = 0; i < length; i++){
if (i == 0){
last = tempArr.pop();
} else if (i == length - 1){
first = tempArr.pop();
} else {
tempArr.pop();
}
}
if (first == '(' && last == ')'){
answer = true;
} else {
answer = false;
}
return answer;
}
이 접근 방식은 문자열의 첫 번째와 마지막 요소를 올바르게 저장하려는 의도를 가지고 있습니다. length
변수가 고정된 값으로 유지되기 때문에, tempArr.pop()
을 사용하여 처음과 마지막 요소를 first
와 last
에 저장하는 로직은 의도대로 동작합니다.
하지만 이 방식은 전체 문자열이 올바른 괄호 문자열인지 확인하는 데 충분하지 않습니다. 문자열의 첫 번째와 마지막 문자만 확인하는 것으로는 괄호가 바르게 짝지어졌는지 판단할 수 없습니다. 전체 문자열의 괄호 짝을 확인하려면 더 복잡한 로직이 필요합니다.
pop()
메서드를 계속 호출하여 불필요한 작업을 수행하고 있습니다. 이는 효율성을 떨어뜨립니다.first
와 last
변수의 사용은 가독성을 떨어뜨리고, 의도한 대로 동작하지 않을 경우 디버깅이 어려울 수 있습니다.올바른 괄호 문자열인지 확인하기 위해 스택을 사용하는 방법이 가장 적절합니다. 스택을 사용하면 여는 괄호를 스택에 추가하고, 닫는 괄호를 만날 때마다 스택에서 제거하여 짝이 맞는지 확인할 수 있습니다.
function solution(s) {
let stack = [];
for (let char of s) {
if (char === '(') {
stack.push(char); // 여는 괄호는 스택에 추가
} else if (char === ')') {
if (stack.length === 0) {
return false; // 닫는 괄호가 있는데 스택이 비어있으면 짝이 맞지 않음
}
stack.pop(); // 닫는 괄호가 있으면 스택에서 가장 위의 요소 제거
}
}
return stack.length === 0; // 모든 괄호를 처리한 후 스택이 비어있으면 올바른 괄호 문자열
}
(
를 만나면 스택에 추가합니다.)
를 만나면 스택이 비어있는지 확인하고, 비어있으면 false
를 반환합니다. 비어있지 않으면 스택에서 가장 위의 요소를 제거합니다.true
, 그렇지 않으면 false
를 반환합니다.이 방법은 전체 문자열을 정확하게 검사하여 올바른 괄호 문자열인지 판단할 수 있는 가장 신뢰할 수 있는 방법입니다. 코딩 테스트에서도 높은 점수를 받을 수 있습니다.