[๋ฐฑ์ค€][JS] 9012๋ฒˆ: ๊ด„ํ˜ธ

๐Ÿ–ฑ๏ธ9012๋ฒˆ: ๊ด„ํ˜ธ

 

๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Parenthesis String, PS)์€ ๋‘ ๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ์ธ ‘(’ ์™€ ‘)’ ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค.

๊ทธ ์ค‘์—์„œ ๊ด„ํ˜ธ์˜ ๋ชจ์–‘์ด ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Valid PS, VPS)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํ•œ ์Œ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ๋กœ ๋œ “( )” ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ VPS ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

๋งŒ์ผ x ๊ฐ€ VPS ๋ผ๋ฉด ์ด๊ฒƒ์„ ํ•˜๋‚˜์˜ ๊ด„ํ˜ธ์— ๋„ฃ์€ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด “(x)”๋„ VPS ๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‘ VPS x ์™€ y๋ฅผ ์ ‘ํ•ฉ(concatenation)์‹œํ‚จ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด xy๋„ VPS ๊ฐ€ ๋œ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด “(())()”์™€ “((()))” ๋Š” VPS ์ด์ง€๋งŒ “(()(”, “(())()))” , ๊ทธ๋ฆฌ๊ณ  “(()” ๋Š” ๋ชจ๋‘ VPS ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด์ด๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด VPS ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•ด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ YES ์™€ NO ๋กœ ๋‚˜ํƒ€๋‚ด์–ด์•ผ ํ•œ๋‹ค. 

 

์ž…๋ ฅ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ํ•œ ์ค„์— ์ฃผ์–ด์ง„๋‹ค.

ํ•˜๋‚˜์˜ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 50 ์ดํ•˜์ด๋‹ค. 

6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(

์ถœ๋ ฅ

์ฒซ์ถœ๋ ฅ์€ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋งŒ์ผ ์ž…๋ ฅ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(VPS)์ด๋ฉด “YES”, ์•„๋‹ˆ๋ฉด “NO”๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. 

NO
NO
YES
NO
YES
NO

 

์˜์‚ฌ์ฝ”๋“œ

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ

์Šคํƒ, ๊ฒฐ๊ณผ๊ฐ’ ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

for(ํ•œ์ค„ of ํ…Œ์ŠคํŠธ๋ฐ์ดํ„ฐ ์—ฌ๋Ÿฌ์ค„) {
	for(ํ•œ ๊ธ€์ž of ํ…Œ์ŠคํŠธ๋ฐ์ดํ„ฐ ํ•œ ์ค„) {
 		if(์—ฌ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ) {
 	       ์Šคํƒ์— ์—ฌ๋Š” ๊ด„ํ˜ธ ์ €์žฅ
        }	else if(๋‹ซ๋Š” ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ) { 
        
            // ์™„์ „ํ•œ ๊ด„ํ˜ธ๋Š” stack์—์„œ ์‚ฌ๋ผ์ง
            if(์Šคํƒ์— ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด) ์Šคํƒ์— ์žˆ๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ ์ œ๊ฑฐ
            else ์Šคํƒ์— ๋‹ซ๋Š” ๊ด„ํ˜ธ ์ €์žฅ
        }
	}
    
    // ๋‚จ์•„์žˆ๋‹ค๋Š”๊ฒƒ์€ ์—ด๊ณ  ๋‹ซ๋Š” ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งž์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป
    ๊ฒฐ๊ณผ๊ฐ’ ๋ณ€์ˆ˜์— ์Šคํƒ์˜ ๊ฐ’์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด YES ์•„๋‹ˆ๋ฉด NO ์ €์žฅ 
    ์Šคํƒ ์ดˆ๊ธฐํ™”
}

๊ฒฐ๊ณผ๊ฐ’ ์ถœ๋ ฅ

 

์†Œ์Šค ์ฝ”๋“œ

// 9012
const filePath = `linux` === process.platform ? `dev/stdin` : 'input.txt';
const lines = require('fs').readFileSync(filePath).toString().trim().split(`\n`);

let stack = [];
const result = [];

for(const line of lines.slice(1)) {
    for(const vps of line.trim().split('')) {
    
        if('(' === vps) {
            stack.push(vps);
        } else if(')' === vps) {

            if('(' === stack[stack.length - 1]) stack.pop();
            else stack.push(vps);
        }
        
    }

    result.push(0 === stack.length? 'YES' : 'NO')
    stack = [];
}

console.log(result.join('\n'))

'Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€][JS] 2563๋ฒˆ: ์ƒ‰์ข…์ด  (0) 2023.05.03
[๋ฐฑ์ค€] Node.js ์ž…์ถœ๋ ฅ  (0) 2023.05.03