🛠️ 문제
💡 풀이
const fs = require('fs');
const path = require('path');
const input = fs.readFileSync(path.join(__dirname, 'input.txt')).toString().trim().split('\n');
const len = input.shift();
// input.txt의 첫 번째 요소 (문자열의 개수) 반환
const result = [];
for (let i = 0; i < len; i++) {
let cnt = 0; // '('와 ')'의 균형을 체크
let isValid = true; // 현재 괄호 문자열이 올바른지 체크
// 각 문자열의 문자를 하나씩 순회
for (let s of input[i]) {
cnt += s === "(" ? 1 : -1;
// '('가 나오면 cnt를 1 증가
// ')'가 나오면 cnt를 1 감소
// '('보다 ')'가 먼저 나오면 무효(cnt가 음수가 되지 않도록)
if (cnt < 0) {
isValid = false;
break;
}
}
// 마지막까지 cnt가 0이어야 올바른 짝임(cnt가 0이 아니면 '('와 ')'의 개수가 맞지 않다는 뜻)
if (cnt !== 0) {
isValid = false;
}
// 괄호 문자열에 대한 결과
result.push(isValid ? 'YES' : 'NO');
}
console.log(result.join('\n'));
💁♀️ 문제
❓ VS code에서 코드 실행 시 정답 출력값과 다른데 백준에 제출했을 땐 맞았다고 뜬다.
왜일까?
- 확실하진 않지만 백준과 로컬 환경의 입력 처리 방식이 다를 수 있기 때문에 발생하는 문제일 수도 있다고 한다.
- 백준에서는 fs.readFileSync('/dev/stdin')를 사용하여 표준 입력을 처리한다.
이는 백준의 문제 입력 방식을 반영한 것이고, 입력이 정확하게 처리된다. - VS Code에서는 path.join(__dirname, 'input.txt')를 사용하여 파일에서 입력을 읽어오고 있기 때문에 입력이 잘못 처리될 수 있다. 특히, 입력 파일 형식이나 개행 처리 등에서 차이가 발생할 수 있다.
- 백준에서는 fs.readFileSync('/dev/stdin')를 사용하여 표준 입력을 처리한다.