let's get IT with DAVINA ๐ป
[๋ฐฑ์ค #1406] ์๋ํฐ ๋ณธ๋ฌธ
โ ๋ฌธ์
ํ ์ค๋ก ๋ ๊ฐ๋จํ ์๋ํฐ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ด ํธ์ง๊ธฐ๋ ์์ด ์๋ฌธ์๋ง์ ๊ธฐ๋กํ ์ ์๋ ํธ์ง๊ธฐ๋ก, ์ต๋ 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%์ ๋ฌธ์ ๋ค ๋๋ง ์ด๋ ค์ด๊ฒ ์๋๋๋น
'DEV_IN > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]Lv0. ๊ตฌ์ฌ์ ๋๋๋ ๊ฒฝ์ฐ์ ์ (0) | 2023.03.17 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]Lv0. ๋ชจ์ค๋ถํธ(1) (1) | 2023.03.16 |
[ํ๋ก๊ทธ๋๋จธ์ค] Lv0. ์ง๋ฃ ์์ ์ ํ๊ธฐ (2) | 2023.03.15 |
[๋ฐฑ์ค #10808] ์ํ๋ฒณ ๊ฐ์ (0) | 2023.03.13 |
[๋ฐฑ์ค] ์๊ณ ๋ฆฌ์ฆ nodejs๋ก ํ๊ธฐ setting (0) | 2023.03.13 |