728x90
반응형
728x170

문제

https://www.acmicpc.net/problem/9012

 

코드

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const T = parseInt(input[0], 10); // 테스트 케이스의 수
const results = [];

function checkVPS(parenthesis) {
    const stack = [];

    for (const char of parenthesis) {
        if (char === '(') {
            stack.push(char); // '('를 만나면 스택에 추가
        } else if (stack.length > 0 && stack[stack.length - 1] === '(') {
            stack.pop(); // ')'를 만나고 스택의 마지막 요소가 '('라면 pop
        } else {
            return 'NO'; // 짝이 맞지 않으면 바로 'NO'
        }
    }

    return stack.length === 0 ? 'YES' : 'NO'; // 스택이 비어있으면 'YES', 아니면 'NO'
}

for (let i = 1; i <= T; i++) {
    results.push(checkVPS(input[i])); // 각 테스트 케이스에 대해 검사 후 결과 저장
}

console.log(results.join('\n')); // 모든 결과 출력

코드 설명

각 괄호 문자열에 대해 checkVPS 함수를 호출하여, 스택을 사용해 올바른 괄호 문자열인지 확인 합니다.

 

그 후 '('를 만나면 스택에 추가하고, ')'를 만나면 택의 마지막 요소가 '('인지 확인하고 맞다면 스택에서 제거하고,  스택이 비어있거나 마지막 요소가 '('가 아니면 No를 return 하도록 합니다.

문제 해설

이 문제는 괄호의 짝이 맞는지를 확인하는 문제입니다. 

 

시간 복잡도

시간 복잡도는 알고리즘이 입력의 크기에 따라 얼마나 빠르게 실행되는지를 나타냅니다

 

문자열의 길이를 n이라 할 때, 각 문자열을 한 번씩만 순회하므로 각 테스트 케이스의 복잡도는 O(n)이 됩니다.

하지만 최악의 경우를 생각할 때 최종 시간 복잡도는 O(T * n)이 됩니다.

 

여기서 T는 테스트 케이스 수를 나타냅니다. 그러니까  몇 개의 괄호 문자열을 검사해야 하는지를 정하는 값이 되는 것이죠.

예를 들어 입력 예제에 6이라는 숫자가 첫 줄에 있으면 6개의 괄호 문자열이 주어지게 되는 것이죠.

 

공간 복잡도

공간 복잡도는 알고리즘이 얼마나 많은 메모리 공간을 사용하는지 나타냅니다.

 

스택을 사용하여 최악의 경우 문자열의 모든 문자를 저장할 수 있으므로 공간 복잡도는 O(n)가 됩니다.

여기서 n은 각 테스트 케이스에서 처리해야 하는 개별 괄호 문자열의 길이를 의미합니다.

728x90
반응형
그리드형

'하루 알고리즘(JS)' 카테고리의 다른 글

[바미] 도키도키 간식드리미  (0) 2024.05.15
[바미] 균형잡힌 세상  (0) 2024.05.14
[바미] 제로  (0) 2024.05.11
[바미] 스택 2  (0) 2024.05.10
[바미] 서로 다른 부분 문자열의 개수  (0) 2024.05.09
Bami