섭스토리
백준 4949번 <균형잡힌 세상> 본문

백준 4949번 <균형잡힌 세상>
실버 4
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
input.pop();
let solve = function (array) {
let foo = [];
for (let k of array) {
if (k === "(") {
foo.push(k);
} else if (k === ")") {
if (foo.length !== 0 && foo[foo.length - 1] === '(') {
foo.pop();
} else {
foo.push(k);
}
} else if (k === "[") {
foo.push(k);
} else if (k === "]") {
if (foo.length !== 0 && foo[foo.length - 1] === '[') {
foo.pop();
} else {
foo.push(k);
}
}
}
if (foo.length !== 0) {
return "no";
} else if (foo.length === 0) {
return "yes";
}
}
for (let v of input) {
console.log(solve(v));
}
사실 문자열에 상관없이 "("는 ")"과, "["는 "]"과 매치되는 것을 보는 코드를 짜면 되겠죠?
foo라는 배열을 따로 지정해주고 문자열을 앞에서 부터 차례대로 읽어나가면서, 괄호가 들어오면 foo에 push를 하되,
닫는 괄호 ")","]" 인 경우에 앞에 "(", "["가 있으면 push하지 않고 뺴도록 짜보았습니다.
만약에 닫는 괄호가 먼저 들어오고 여는 괄호가 나중에 들어오면 그대로 foo 안에 쌓이겠죠?
[ " ) " , " ( " ] --> 이렇게요.
최종적으로, foo 안에 배열의 요소가 하나도 없어야 균형잡힌 문자열로 인식을 해서, yes를 출력하게 됩니다.
얼마전에 자료구조 스터디에서 스택을 배워서 크게 어려움은 없었습니다.
const a = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");
for (let i = 0; i < a.length; i++) {
if (a[i] == '.') break
const s = []
let b = false
for (const t of a[i]) {
if (t == '(' || t == '[') s.push(t)
if ((t == ')' && s.pop() != '(') || (t == ']' && s.pop() != '[')) b = true
}
console.log(b || s.length ? 'no' : 'yes')
다른 분이 입력하신 코드인데요.
저랑 대략적인 코드의 흐름은 비슷한데, " || " 비교 연산자를 많이 사용하셔서 가져와봤습니다.
마지막 줄을 보면,
console.log(b || s.length ? 'no' : 'yes')
위에서 이미 let b = false 로 선언을 한 상태이구요.
"||" 연산자는 앞에 요소가 true면 무조건, 뒤에 요소를 보지도 않고 true를 반환합니다.
그러나 이 경우는, 앞에 b가 false기 때문에 s.length 가 true 면 "no"를 출력하고, s.length 가 false 면 "yes"를 출력하게 됩니다.
0이 false고, 그 외 숫자는 모두 true 기 때문에, s.length == 0 이면 균형잡힌 문자열이므로 "yes"를 출력,
s에 하나라도 요소가 있으면 균형잡힌 문자열이 아니기 때문에 "no"를 출력하게 됩니다.
'백준 풀이 🍪' 카테고리의 다른 글
백준 10814번 <나이순 정렬> (0) | 2022.08.25 |
---|---|
백준 11866번 <요세푸스 문제 0> (0) | 2022.08.25 |
백준 2798번 <블랙잭> (1) | 2022.08.18 |
백준 1920번 <수 찾기> (0) | 2022.08.16 |
백준 1259번 <팰린드롬수> (0) | 2022.08.16 |