๊ฐœ๋ฐœ์ž HOON
๐Ÿ› HOON DEVLog
๊ฐœ๋ฐœ์ž HOON
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ˜Ž ์ „์ฒด ์นดํ…Œ๊ณ ๋ฆฌ (137)
    • ๐Ÿ“ ์‹ ์ž… ์ธํ„ฐ๋ทฐ ์ค€๋น„ (7)
    • ๐Ÿฆ” ์ทจ์—…์ค€๋น„ ๊ธฐ๋ก (7)
    • โ˜• ์ž๋ฐ” : JAVA (5)
    • ๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS (80)
    • ๐ŸŒฑ ๋ฐฑ์—”๋“œ : Backend (13)
    • ๐Ÿงช ์ปดํ“จํ„ฐ๊ณผํ•™ : CS (11)
    • ๐Ÿ—‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค : DB (1)
    • ๐Ÿƒ‍โ™‚๏ธ DEVLOG (8)
    • โš™๏ธ Trouble Shooting (5)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • GitHub
  • Resume

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๊ฐœ๋ฐœ์ž HOON

๐Ÿ› HOON DEVLog

๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ด„ํ˜ธ ๋ณ€ํ™˜ (level2, python)

2022. 10. 11. 15:53

๐Ÿ ๋ฌธ์ œ ์„ค๋ช…

 

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

 

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

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

 

'(' ์™€ ')' ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 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 ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ

"(()())()" "(()())()"
")(" "()"
"()))((()" "()(())()"

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

์ž…์ถœ๋ ฅ ์˜ˆ #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์˜ ์•ž๋’ค ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž์˜ ๊ด„ํ˜ธ ๋ฐฉํ–ฅ์„ ๋’ค์ง‘์œผ๋ฉด "()"์ด ๋ฉ๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ž์—ด์€ "(" + "()" + ")" + "()"์ด๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ "(())()"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜์Œ์— ๊ทธ๋Œ€๋กœ ๋‘” ๋ฌธ์ž์—ด์— ๋ฐ˜ํ™˜๋œ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ด๋ฉด "()" + "(())()" = "()(())()"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ ํ’€์ด ์ฝ”๋“œ

def flip(u):
    if len(u) == 2:
        return ''
    temp = u[1:-1]
    return ''.join(['(' if t == ')' else ')' for t in temp])

def solution(p):
    if p == '':
        return p
    
    whole = len(p)
    u, v = '', ''
    
    for i in range(2, whole+1, 2):
        a, b = p[:i], p[i:]
        if b.count(')') == b.count('('):
            u, v = a, b
            break
    
    stack = []
    for letter in u:
        if letter == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                stack.append(letter)
        else:
            stack.append(letter)
    
    if not stack:
        return u + solution(v)
    else:
        return '(' + solution(v) + ')' + flip(u)

 

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ๋‹ค.

์ฃผ์–ด์ง„ ๋‹จ์–ด p๋ฅผ u์™€ v๋กœ ์ชผ๊ฐ  ๋‹ค์Œ, u์— ๋Œ€ํ•ด์„œ๋งŒ stack์„ ์ด์šฉํ•ด์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ (if not stack), u + solution(v) ์žฌ๊ท€๋ฅผ,

์˜ฌ๋ฐ”๋ฅธ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๊ฒฝ์šฐ (else), '(' + solution(v) + ')' + flip(u) ์žฌ๊ท€๋ฅผ ๋Œ๋ฆฐ๋‹ค.

 

๋ ˆ๋ฒจ 2๊ณ , ์ฃผ์–ด์ง„๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ํ’€๋ฆฌ์ง€๋งŒ ์€๊ทผํžˆ ์–ด๋ ค์šด ๋ฌธ์ œ๋‹ค.

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฉ๊ธˆ๊ทธ๊ณก (level2, python)  (1) 2022.10.13
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ (level2, python)  (0) 2022.10.13
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋งค๋‰ด ๋ฆฌ๋‰ด์–ผ (level2, python)  (0) 2022.10.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ณด์„ ์‡ผํ•‘ (level3, python)  (0) 2022.10.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ถˆ๋Ÿ‰ ์‚ฌ์šฉ์ž (level3, python)  (0) 2022.09.27
    '๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฐฉ๊ธˆ๊ทธ๊ณก (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ–‰๋ ฌ ํ…Œ๋‘๋ฆฌ ํšŒ์ „ (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋งค๋‰ด ๋ฆฌ๋‰ด์–ผ (level2, python)
    • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ณด์„ ์‡ผํ•‘ (level3, python)
    ๊ฐœ๋ฐœ์ž HOON
    ๊ฐœ๋ฐœ์ž HOON
    ์ข‹์€ ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ก์„ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค. # ์ฃผ๋‹ˆ์–ด # ๋ฐฑ์—”๋“œ # ๊ฐœ๋ฐœ์ž

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”