μΈκ³λ κ· νμ΄ μ μ‘νμμ΄μΌ νλ€. μκ³Ό μ, λΉκ³Ό μ΄λ κ·Έλ¦¬κ³ μΌμͺ½ κ΄νΈμ μ€λ₯Έμͺ½ κ΄νΈμ²λΌ λ§μ΄λ€.
μ λ―Όμ΄μ μ무λ μ΄λ€ λ¬Έμμ΄μ΄ μ£Όμ΄μ‘μ λ, κ΄νΈλ€μ κ· νμ΄ μ λ§μΆ°μ Έ μλμ§ νλ¨νλ νλ‘κ·Έλ¨μ μ§λ κ²μ΄λ€.
λ¬Έμμ΄μ ν¬ν¨λλ κ΄νΈλ μκ΄νΈ("()") μ λκ΄νΈ("[]")λ‘ 2μ’ λ₯μ΄κ³ , λ¬Έμμ΄μ΄ κ· νμ μ΄λ£¨λ 쑰건μ μλμ κ°λ€.
λͺ¨λ μΌμͺ½ μκ΄νΈ("(")λ μ€λ₯Έμͺ½ μκ΄νΈ(")")μλ§ μ§μ μ΄λ€μΌ νλ€.
λͺ¨λ μΌμͺ½ λκ΄νΈ("[")λ μ€λ₯Έμͺ½ λκ΄νΈ("]")μλ§ μ§μ μ΄λ€μΌ νλ€.
λͺ¨λ μ€λ₯Έμͺ½ κ΄νΈλ€μ μμ κ³Ό μ§μ μ΄λ£° μ μλ μΌμͺ½ κ΄νΈκ° μ‘΄μ¬νλ€.
λͺ¨λ κ΄νΈλ€μ μ§μ 1:1 λ§€μΉλ§ κ°λ₯νλ€. μ¦, κ΄νΈ νλκ° λ μ΄μμ κ΄νΈμ μ§μ§μ΄μ§μ§ μλλ€.
μ§μ μ΄λ£¨λ λ κ΄νΈκ° μμ λ, κ·Έ μ¬μ΄μ μλ λ¬Έμμ΄λ κ· νμ΄ μ‘νμΌ νλ€.
μ λ―Όμ΄λ₯Ό λμ λ¬Έμμ΄μ΄ μ£Όμ΄μ‘μ λ κ· νμ‘ν λ¬Έμμ΄μΈμ§ μλμ§λ₯Ό νλ¨ν΄λ³΄μ.
κ° λ¬Έμμ΄μ λ§μ§λ§ κΈμλ₯Ό μ μΈνκ³ μλ¬Έ μνλ²³, 곡백, μκ΄νΈ("( )"), λκ΄νΈ("[ ]")λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ¨μ (".")μΌλ‘ λλκ³ , κΈΈμ΄λ 100κΈμλ³΄λ€ μκ±°λ κ°λ€.
μ
λ ₯μ μ’
λ£μ‘°κ±΄μΌλ‘ 맨 λ§μ§λ§μ μ¨μ νλ(".")κ° λ€μ΄μ¨λ€.
μΆλ ₯
κ° μ€λ§λ€ ν΄λΉ λ¬Έμμ΄μ΄ κ· νμ μ΄λ£¨κ³ μμΌλ©΄ "yes"λ₯Ό, μλλ©΄ "no"λ₯Ό μΆλ ₯νλ€.
μμ μ
λ ₯ 1
So when I die (the [first] I will see in (heaven) is a score list).
[ first in ] ( first out ).
Half Moon tonight (At least it is better than no Moon at all].
A rope may form )( a trail in a maze.
Help( I[m being held prisoner in a fortune cookie factory)].
([ (([( [ ] ) ( ) (( ))] )) ]).
.
.
μμ μΆλ ₯ 1
yes
yes
no
no
no
yes
yes
7λ²μ§Έμ " ."μ κ°μ΄ κ΄νΈκ° νλλ μλ κ²½μ°λ κ· νμ‘ν λ¬Έμμ΄λ‘ κ°μ£Όν μ μλ€.
const signDict = ['(', ')', '[', ']']
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split("\n")
input.pop()
const result = input.map(a => {
const signStack = []
for(let i = 0 ; i < a.length ; i ++) {
const curStr = a[i]
if(!signDict.includes(curStr)) continue
if(curStr === '(' || curStr === '[') {
signStack.push(curStr)
}
else {
const lastSign = signStack.at(-1)
if(curStr === ')') {
if(lastSign !== '(') return 'no'
} else {
if(lastSign !== '[') return 'no'
}
signStack.pop()
}
}
return (!signStack.length) ? 'yes' : 'no'
})
console.log(result.join('\n'))