Hello Ocean! ๐ŸŒผ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 2020 ์นด์นด์˜ค/๊ด„ํ˜ธ ๋ณ€ํ™˜ ๋ณธ๋ฌธ

Algorithm

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 2020 ์นด์นด์˜ค/๊ด„ํ˜ธ ๋ณ€ํ™˜

bba_dda 2020. 10. 12. 15:22
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ์„ค๋ช…

์นด์นด์˜ค์— ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ ์ž…์‚ฌํ•œ์ฝ˜์€ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์—ญ๋Ÿ‰ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ผ๋Š” ์—…๋ฌด ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋กœ๊ทธ๋ฅผ ๋ณด๋‹ˆ ๋Œ€๋ถ€๋ถ„ ์†Œ์Šค ์ฝ”๋“œ ๋‚ด ์ž‘์„ฑ๋œ ๊ด„ํ˜ธ๊ฐ€ ๊ฐœ์ˆ˜๋Š” ๋งž์ง€๋งŒ ์ง์ด ๋งž์ง€ ์•Š์€ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜์ •ํ•ด์•ผ ํ•  ์†Œ์Šค ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ณ ๋ฏผํ•˜๋˜์ฝ˜์€ ์†Œ์Šค ์ฝ”๋“œ์— ์ž‘์„ฑ๋œ ๋ชจ๋“  ๊ด„ํ˜ธ๋ฅผ ๋ฝ‘์•„์„œ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋œ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์„ ์•Œ๋ ค์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด์˜ ์ •์˜

'('์™€')'๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์žˆ์„ ๊ฒฝ์šฐ, '(' ์˜ ๊ฐœ์ˆ˜์™€ ')' ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์ด๋ฅผ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์— '('์™€ ')'์˜ ๊ด„ํ˜ธ์˜ ์ง๋„ ๋ชจ๋‘ ๋งž์„ ๊ฒฝ์šฐ์—๋Š” ์ด๋ฅผ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด,"(()))("์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด์ง€๋งŒ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์€ ์•„๋‹™๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด์—"(())()"์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์€๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฉด์„œ ๋™์‹œ์—์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

'(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด w๊ฐ€๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ž…๋ ฅ์ด ๋นˆ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ, ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 2. ๋ฌธ์ž์—ด w๋ฅผ ๋‘ "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, u๋Š” "๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"๋กœ ๋” ์ด์ƒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•˜๋ฉฐ, v๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด" ์ด๋ผ๋ฉด ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 3-1. ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ u์— ์ด์–ด ๋ถ™์ธ ํ›„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 4. ๋ฌธ์ž์—ด u๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด"์ด ์•„๋‹ˆ๋ผ๋ฉด ์•„๋ž˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 4-1. ๋นˆ ๋ฌธ์ž์—ด์— ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋กœ '('๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. 4-2. ๋ฌธ์ž์—ด v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ž…๋‹ˆ๋‹ค. 4-3. ')'๋ฅผ ๋‹ค์‹œ ๋ถ™์ž…๋‹ˆ๋‹ค. 4-4. u์˜ ์ฒซ ๋ฒˆ์งธ์™€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์—ด์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์–ด์„œ ๋’ค์— ๋ถ™์ž…๋‹ˆ๋‹ค. 4-5. ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ดp๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•ด์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค๋ช…

  • p๋Š” '(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋ฉฐ ๊ธธ์ด๋Š” 2 ์ด์ƒ 1,000 ์ดํ•˜์ธ ์ง์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์ž์—ด p๋ฅผ ์ด๋ฃจ๋Š” '(' ์™€ ')' ์˜ ๊ฐœ์ˆ˜๋Š” ํ•ญ์ƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ p๊ฐ€ ์ด๋ฏธ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด ๊ทธ๋Œ€๋กœ return ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

p result
"(()())()" "(()())()"
")(" "()"
"()))((()" "()(())()"

์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
์ด๋ฏธ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • ๋‘ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • u =")("
    • v =""
  • u๊ฐ€์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋นˆ ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
    • u์˜ ์•ž๋’ค ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์œผ๋ฉด""์ด ๋ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ž์—ด์€"("+""+")"+""์ด๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ"()"๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • ๋‘ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • u ="()"
    • v ="))((()"
  • ๋ฌธ์ž์—ด u๊ฐ€์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ณ , v์— ๋Œ€ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์‹œ ๋‘ ๋ฌธ์ž์—ด u, v๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • u ="))(("
    • v ="()"
  • u๊ฐ€์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • v์— ๋Œ€ํ•ด 1๋‹จ๊ณ„๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด"()"์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
    • u์˜ ์•ž๋’ค ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์œผ๋ฉด"()"์ด ๋ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ž์—ด์€"("+"()"+")"+"()"์ด๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ"(())()"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์— ๊ทธ๋Œ€๋กœ ๋‘” ๋ฌธ์ž์—ด์— ๋ฐ˜ํ™˜๋œ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ด๋ฉด"()"+"(())()"="()(())()"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช…์ด ๋ชน์‹œ ๊ธธ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ๋Œ€๋กœ ์š”์•ฝํ•ด๋ณด์•˜๋‹ค.

1. p๋ฅผ u,v๋กœ ์ž๋ฅธ๋‹ค

 

2-1. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด๋ฉด
    1) v์— ๋Œ€ํ•ด 1๋ฒˆ ๋ถ€ํ„ฐ ์ˆ˜ํ–‰ํ•ด์„œ u๋’ค์— ์ด์–ด๋ถ™์ธ ๋’ค return

 

2-2, u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด
    1) ๋นˆ ๋ฌธ์ž์—ด์— '(' ๋ถ™์ด๊ธฐ
    2) v์— ๋Œ€ํ•ด 1๋ฒˆ๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ถ™์ด๊ธฐ
    3) ')' ๋ถ™์ด๊ธฐ
    4) u์˜ ๋งจ ์ฒ˜์Œ๊ณผ ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์ œ๊ฑฐ
    5) u์˜ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค์„ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ ํ•ด์„œ ๋ฌธ์ž์—ด์— ๋ถ™์ด๊ธฐ
    6) ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด return

ํ’€์ด

solution ํ•จ์ˆ˜๋ฅผ ์ฝ”๋”ฉํ•˜๊ธฐ ์ „์—, ๋ฌธ์ œ ํ’€์ด ๊ณผ์ •์—์„œ ํ•„์š”ํ• ๊ฒƒ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ๋งŒ๋“ค์—ˆ๋‹ค.

  1. int my_split(string p)
  • ๋ฌธ์ž์—ด p๋ฅผ u์™€ v๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค.

  • u์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋‹ค๊ฐ€ ๊ท ํ˜•์žกํžŒ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์™„์„ฑ๋˜๋ฉด ํ•ด๋‹น ์ž๋ฆฌ์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • solutionํ•จ์ˆ˜๋Š” ์œ„์˜ index๊ฐ’์„ ๋ฐ›์•„ substr()์„ ์ด์šฉํ•ด ๋ฌธ์ž์—ด์„ u์™€ v๋กœ ์ชผ๊ฐ ๋‹ค.

    int my_split(string p) { //u์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜ index ๋ฐ˜ํ™˜ 
      int right = 0, left = 0;
      if (p[0] == '(')
          left++;
      else
          right++;
      int i = 1;
      int index;
      while (right != left) {
          if (p[i] == '(')
              left++;
          else
              right++;
          i++;
      }
      index = i - 1;
      return index;
    }
  1. bool is_proper(string p)
  • ๋ฌธ์ž์—ด p๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค.

  • ์˜ฌ๋ฐ”๋ฅด๋ฉด 1, ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • stack์„ ์ด์šฉํ•œ๋‹ค.

    bool is_proper(string p) { //ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋‹จ
      stack<char> s;
      if (p[0] == ')') //์‹œ์ž‘๋ถ€ํ„ฐ ')'์ด๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Œ 
          return false;
      s.push(p[0]);
      for (int i = 1;i < p.size();i++) {
          if (s.empty()) 
              return 0; //์ „๋ถ€ ๋Œ๊ธฐ ์ „์— ์ด๋ฏธ ์Šคํƒ์ด ๋น„์–ด๋ฒ„๋ฆฌ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Œ. 
          if (s.top() == p[i])
              s.push(p[i]);
          else 
              s.pop();    
      }
      return s.empty(); //s๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด(true) 
    }

solutionํ•จ์ˆ˜๋Š” ์œ„์— ์š”์•ฝํ•œ ๊ณผ์ •์„ ๊ทธ๋Œ€๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.
1. p๋ฅผ u,v๋กœ ์ž๋ฅธ๋‹ค

 

2-1. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด๋ฉด

    1) v์— ๋Œ€ํ•ด 1๋ฒˆ ๋ถ€ํ„ฐ ์ˆ˜ํ–‰ํ•ด์„œ u๋’ค์— ์ด์–ด๋ถ™์ธ ๋’ค return

 

2-2, u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด

    1) ๋นˆ ๋ฌธ์ž์—ด์— '(' ๋ถ™์ด๊ธฐ
    2) v์— ๋Œ€ํ•ด 1๋ฒˆ๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ๋ถ™์ด๊ธฐ
    3) ')' ๋ถ™์ด๊ธฐ
    4) u์˜ ๋งจ ์ฒ˜์Œ๊ณผ ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์ œ๊ฑฐ
    5) u์˜ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค์„ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋ฐ˜๋Œ€๋กœ ํ•ด์„œ ๋ฌธ์ž์—ด์— ๋ถ™์ด๊ธฐ
    6) ์ƒ์„ฑ๋œ ๋ฌธ์ž์—ด return

string solution(string p) { //์žฌ๊ท€
    string answer = "";
    if (p.size() == 0)
        return "";
    string u, v;
    //1. p๋ฅผ u,v๋กœ ์ž๋ฅด๊ธฐ 
    int index = my_split(p);
    u = p.substr(0, index+1);
    v = p.substr(index + 1);

    //2. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ๊ฒ€์‚ฌ
    if (is_proper(u)) { //2-1. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด๋ฉด
        answer.append(u);
        string result = solution(v);
        answer.append(result);
    }
    else { //2-2. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด
        answer.append("("); // 1)
        string result = solution(v); // 2)
        answer.append(result);
        answer.append(")"); // 3)
        u = u.substr(1, u.size() - 2); // 4) u์˜ ๋งจ ์ฒ˜์Œ, ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์ œ๊ฑฐ 
        // 5) u์˜ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค ๊ด„ํ˜ธ ๋’ค์ง‘์–ด์„œ ๋ถ™์ด๊ธฐ 
        for (int i = 0;i < u.size();i++) {
            if (u[i] == '(')
                answer.append(")");
            else
                answer.append("(");
        }
    }
    return answer;    
}

์ตœ์ข… ์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>
#include <stack>

using namespace std;
int my_split(string p) { //u์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜ index ๋ฐ˜ํ™˜ 
      int right = 0, left = 0;
      if (p[0] == '(')
          left++;
      else
          right++;
      int i = 1;
      int index;
      while (right != left) {
          if (p[i] == '(')
              left++;
          else
              right++;
          i++;
      }
      index = i - 1;
      return index;
    }

bool is_proper(string p) { //ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋‹จ
      stack<char> s;
      if (p[0] == ')') //์‹œ์ž‘๋ถ€ํ„ฐ ')'์ด๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Œ 
          return false;
      s.push(p[0]);
      for (int i = 1;i < p.size();i++) {
          if (s.empty()) 
              return 0; //์ „๋ถ€ ๋Œ๊ธฐ ์ „์— ์ด๋ฏธ ์Šคํƒ์ด ๋น„์–ด๋ฒ„๋ฆฌ๋ฉด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Œ. 
          if (s.top() == p[i])
              s.push(p[i]);
          else 
              s.pop();    
      }
      return s.empty(); //s๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด(true) 
    }

string solution(string p) { //์žฌ๊ท€
    string answer = "";
    if (p.size() == 0)
        return "";
    string u, v;
    //1. p๋ฅผ u,v๋กœ ์ž๋ฅด๊ธฐ 
    int index = my_split(p);
    u = p.substr(0, index+1);
    v = p.substr(index + 1);

    //2. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ๊ฒ€์‚ฌ
    if (is_proper(u)) { //2-1. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด๋ฉด
        answer.append(u);
        string result = solution(v);
        answer.append(result);
    }
    else { //2-2. u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ฉด
        answer.append("("); // 1)
        string result = solution(v); // 2)
        answer.append(result);
        answer.append(")"); // 3)
        u = u.substr(1, u.size() - 2); // 4) u์˜ ๋งจ ์ฒ˜์Œ, ๋งจ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์ œ๊ฑฐ 
        // 5) u์˜ ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋“ค ๊ด„ํ˜ธ ๋’ค์ง‘์–ด์„œ ๋ถ™์ด๊ธฐ 
        for (int i = 0;i < u.size();i++) {
            if (u[i] == '(')
                answer.append(")");
            else
                answer.append("(");
        }
    }
    return answer;    
}
๋ฐ˜์‘ํ˜•