let's get IT with DAVINA ๐Ÿ’ป

[๋ฐฑ์ค€ #1406] ์—๋””ํ„ฐ ๋ณธ๋ฌธ

DEV_IN/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€ #1406] ์—๋””ํ„ฐ

๋‹ค๋นˆ์น˜์ฝ”๋“œ๐Ÿ’Ž 2023. 3. 16. 21:47

โ“ ๋ฌธ์ œ

ํ•œ ์ค„๋กœ ๋œ ๊ฐ„๋‹จํ•œ ์—๋””ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด ํŽธ์ง‘๊ธฐ๋Š” ์˜์–ด ์†Œ๋ฌธ์ž๋งŒ์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ์ง‘๊ธฐ๋กœ, ์ตœ๋Œ€ 600,000๊ธ€์ž๊นŒ์ง€ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ํŽธ์ง‘๊ธฐ์—๋Š” '์ปค์„œ'๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋Š”๋ฐ, ์ปค์„œ๋Š” ๋ฌธ์žฅ์˜ ๋งจ ์•ž(์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์˜ ์™ผ์ชฝ), ๋ฌธ์žฅ์˜ ๋งจ ๋’ค(๋งˆ์ง€๋ง‰ ๋ฌธ์ž์˜ ์˜ค๋ฅธ์ชฝ), ๋˜๋Š” ๋ฌธ์žฅ ์ค‘๊ฐ„ ์ž„์˜์˜ ๊ณณ(๋ชจ๋“  ์—ฐ์†๋œ ๋‘ ๋ฌธ์ž ์‚ฌ์ด)์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ๊ธธ์ด๊ฐ€ L์ธ ๋ฌธ์ž์—ด์ด ํ˜„์žฌ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ์œผ๋ฉด, ์ปค์„œ๊ฐ€ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์€ L+1๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

์ด ํŽธ์ง‘๊ธฐ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ช…๋ น ์ˆ˜ํ–‰ํ•  ๋ช…๋ น
L ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ)
D ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ๋’ค์ด๋ฉด ๋ฌด์‹œ๋จ)
B ์ปค์„œ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•จ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ)
์‚ญ์ œ๋กœ ์ธํ•ด ์ปค์„œ๋Š” ํ•œ ์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ, ์‹ค์ œ๋กœ ์ปค์„œ์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋˜ ๋ฌธ์ž๋Š” ๊ทธ๋Œ€๋กœ์ž„
P $ $๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์ปค์„œ ์™ผ์ชฝ์— ์ถ”๊ฐ€ํ•จ

์ดˆ๊ธฐ์— ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง€๊ณ , ๊ทธ ์ดํ›„ ์ž…๋ ฅํ•œ ๋ช…๋ น์–ด๊ฐ€ ์ฐจ๋ก€๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ํ›„ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ช…๋ น์–ด๊ฐ€ ์ˆ˜ํ–‰๋˜๊ธฐ ์ „์— ์ปค์„œ๋Š” ๋ฌธ์žฅ์˜ ๋งจ ๋’ค์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ’ก ์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ดˆ๊ธฐ์— ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์€ ๊ธธ์ด๊ฐ€ N์ด๊ณ , ์˜์–ด ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ธธ์ด๋Š” 100,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ž…๋ ฅํ•  ๋ช…๋ น์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(1 ≤ M ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์ž…๋ ฅํ•  ๋ช…๋ น์–ด๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ช…๋ น์–ด๋Š” ์œ„์˜ ๋„ค ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜์˜ ํ˜•ํƒœ๋กœ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

๐Ÿ’ก ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ชจ๋“  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚œ ํ›„ ํŽธ์ง‘๊ธฐ์— ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ—๏ธ ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

์˜ˆ์ œ ์ž…๋ ฅ

abcd
3
P x
L
P y

์˜ˆ์ œ ์ถœ๋ ฅ

abcdyx

โ—๏ธ Solution

  • ์ผ๋‹จ, ์ž…๋ ฅ์ด ์—ฌ๋Ÿฌ๊ฐœ && ์—ฌ๋Ÿฌ ์ค„
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split("\n");
  • ์ปค์„œ๋ฅผ ๊ธฐ์ค€ ์œ„์น˜๋กœ ์žก๊ณ  ์™ผ์ชฝ Stack & ์˜ค๋ฅธ์ชฝ Stack์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋กœ์ง์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜์ž!
๋ช…๋ น ์ˆ˜ํ–‰ํ•  ๋ช…๋ น ์ฝ”๋“œ ๋‚ด์—์„œ์˜ ๋™์ž‘
L ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ) ์™ผ์ชฝ ์Šคํƒ์—์„œ pop์„ ํ•ด์„œ ์˜ค๋ฅธ์ชฝ ์Šคํƒ์— pushํ•œ๋‹ค. (์™ผ์ชฝ ์Šคํƒ์ด ๋น„์—ˆ์„ ๊ฒฝ์šฐ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค.)
D ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์˜ฎ๊น€ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ๋’ค์ด๋ฉด ๋ฌด์‹œ๋จ) ์˜ค๋ฅธ์ชฝ ์Šคํƒ์—์„œ pop์„ ํ•ด์„œ ์™ผ์ชฝ ์Šคํƒ์— pushํ•œ๋‹ค. (์˜ค๋ฅธ์ชฝ ์Šคํƒ์ด ๋น„์—ˆ์„ ๊ฒฝ์šฐ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค.)
B ์ปค์„œ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•จ (์ปค์„œ๊ฐ€ ๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด๋ฉด ๋ฌด์‹œ๋จ)
์‚ญ์ œ๋กœ ์ธํ•ด ์ปค์„œ๋Š” ํ•œ ์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚˜์ง€๋งŒ, ์‹ค์ œ๋กœ ์ปค์„œ์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋˜ ๋ฌธ์ž๋Š” ๊ทธ๋Œ€๋กœ์ž„
์™ผ์ชฝ ์Šคํƒ์—์„œ ๋ฌด์กฐ๊ฑด popํ•œ๋‹ค.
(์Šคํƒ์ด ๋น„์–ด์žˆ๋‹ค๋ฉด undefined๋ฅผ popํ•˜๋ฏ€๋กœ ๋ณ„ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋ฅธ์ชฝ ์Šคํƒ์€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒ๊ด€์ด ์—†๋‹ค.)
P $ $๋ผ๋Š” ๋ฌธ์ž๋ฅผ ์ปค์„œ ์™ผ์ชฝ์— ์ถ”๊ฐ€ํ•จ ์™ผ์ชฝ ์Šคํƒ์— $ ๋ฌธ์ž๋ฅผ pushํ•œ๋‹ค.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split("\n");

let lStack = input[0].split(""); //์™ผ์ชฝ stack์—๋Š” input ์ฒซ๋ฒˆ์žฌ์— ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด ex) abcd
let rStack = []; //์ปค์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์€ ์•„์ง ๋นˆ๋ฐฐ์—ด
let command=""; //๋ช…๋ น์–ด

for(let i=2;i<input.length;i++){ //์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด, ๋ช…๋ น์–ด ๊ฐœ์ˆ˜ ์ดํ›„ ๋ช…๋ น๋“ค๋ถ€ํ„ฐ
    if(input[i].length===3){ //3๊ธ€์ž ์ด์ƒ์ด๋ฉด "P $"ํ˜•ํƒœ์ผํ…Œ๋‹ˆ
        command=input[i][2] //๊ฐ P์— ๋Œ€ํ•œ ๋ช…๋ น์–ด์˜ ๋ฌธ์ž์—ด๋ถ€๋ถ„ (pushํ•  ๋ฌธ์ž์—ด)
    }


    switch(input[i][0]){ //๋ชจ๋“  ๋ช…๋ น์–ด์˜ ์ฒซ๋ฒˆ์งธ ๊ธ€์ž๋“ค์„ ๋ณด์ž
        case "L" : if(lStack.length!==0) rStack.push(lStack.pop()); //๋ฌธ์žฅ์˜ ๋งจ ์•ž์ด ์•„๋‹๋•Œ && ์™ผ์ชฝ์œผ๋กœ ์ปค์„œ๋ฅผ ์˜ฎ๊ธฐ๋ ค๋ฉด ์™ผ์ชฝ stack์—์„œ ๋งˆ์ง€๋ง‰๊บผ ์•ž์œผ๋กœ ๊ฐ€์ž
            break;
        case "D" : if(rStack.length!==0) lStack.push(rStack.pop()); //๋ฌธ์žฅ์˜ ๋งจ ๋’ค๊ฐ€ ์•„๋‹๋•Œ && ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ปค์„œ๋ฅผ ์˜ฎ๊ธฐ๋ ค๋ฉด ์˜ค๋ฅธ์ชฝ stack ๋งˆ์ง€๋ง‰๊บผ๋ฅผ popํ•ด์„œ ์™ผ์ชฝ stack์— push
            break;
        case "B" : if(lStack.length!==0) lStack.pop(); //๊ทธ๋ƒฅ ์™ผ์ชฝ๊บผ ์ง€์›Œ! 
            break;
        case "P" : lStack.push(command);  //์™ผ์ชฝ์— command๋ฌธ์ž์—ด push์ถ”๊ฐ€ํ•ด!
            break;
    }
}

const result = [...lStack, ...rStack.reverse()]; //L๋ช…๋ น์–ด๋กœ rStack์— ์ถ”๊ฐ€ํ• ๋• ์ˆœ์„œ๊ฐ€ ๊ฑฐ๊พธ๋กœ๋‹ˆ๊นŒ reverse
console.log(result.join("")); //๋ฌธ์ž์—ด๋กœ return
๋ช‡์‹ญ๋ถ„์„ ๋„˜๊ฒŒ ๊ณ ๋ฏผํ•ด๋„ ๋ฐฉ๋ฒ•์กฐ์ฐจ ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜๊ณ  ์ˆ˜๋งŽ์€ ๋ธ”๋กœ๊ทธ ๊ธ€๋“ค์„ ๋ด๋„ ์ดํ•ด๊ฐ€ ์‰ฝ์‚ฌ๋ฆฌ ๊ฐ€์ง„ ์•Š์•˜๋˜ ๋ฌธ์ œ.. ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž ์ฐพ์•„๋ณธ ์—ฐ์Šต๋ฌธ์ œ์ธ๋ฐ๋„ ๋ฉ˜๋ถ•์ด์—ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ •๋‹ต๋ฅ  26%์˜ ๋ฌธ์ œ๋‹ค ๋‚˜๋งŒ ์–ด๋ ค์šด๊ฒŒ ์•„๋‹ˆ๋Œœ๋นˆ
Comments