์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๋ฌธ์ œํ’€์ด (Python)

[Programmers] ๊ด„ํ˜ธ ๋ณ€ํ™˜ (Lv.2) 2024/4/5

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2024. 4. 6. 00:19
728x90
๋ฌธ์ œ ์ œ๋ชฉ ์ •๋‹ต๋ฅ  ๋‚œ์ด๋„
๊ด„ํ˜ธ ๋ณ€ํ™˜ 47% Lv.2
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ์š”์•ฝ
๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
์กฐ๊ฑด 1) s๋ฅผ ๊ท ํ˜• ์žกํžŒ u, ์ผ๋ฐ˜ v๋กœ ๋ถ„ํ•  (๊ท ํ˜• ์žกํžŒ== (, )์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋™์ผ)
์กฐ๊ฑด 2) u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํŒ๋‹จ (์˜ฌ๋ฐ”๋ฅธ= (์ด ์ง๊ฟ) ์•ž์— ๋‚˜์™€์•ผ ํ•จ)
์กฐ๊ฑด 3) ()์˜ ๊ฐœ์ˆ˜๋Š” ๋™์ผ, ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ๋Š” 2~1000 ์ดํ•˜
์ด๋•Œ s๊ฐ€ ๋ฐ”๋ฅธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋˜๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์—ฌ๋ผ(์ž์„ธํ•œ ๋กœ์ง์€ ๋ฌธ์ œ์— ์กด์žฌ)
 

ํ’€์ด

Step1. ์žฌ๊ท€ ํ’€์ด ๊ตฌํ˜„์‹œ -> ์ดˆ๊ธฐ ์กฐ๊ฑด ์„ค์ • ์ƒ๊ฐ
Step2. ๋ฌธ์ œ์˜ ํ’€์ด ๋”ฐ๋ผ๊ฐ€๊ธฐ

  • string ๊ธธ์ด 0์ด๋ฉด -> ' '
  • string -> balance u, v๋กœ ์ชผ๊ฐœ๊ธฐ
  • string u๊ฐ€
    • correct์ด๋ฉด -> u๊ฒฐ๊ณผ์— v๋ฅผ string์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์—ฐ์‚ฐํ•ด์„œ ๋ฐ˜ํ™˜
    • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด '('+ v๋ฅผ string์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์—ฐ์‚ฐ+')'+u[1:-1]์˜ ๊ด„ํ˜ธ ๋’ค์ง‘์–ด์„œ ๋ฐ˜ํ™˜

 

์ฝ”๋“œ

def split_balance(string): #balance๋กœ split
    sum=0
    index=0
    for idx, bracket in enumerate(string):
        if bracket=='(':
            sum-=1
        else:
            sum+=1
        if sum==0:
            break
    return string[:idx+1], string[idx+1:]

def is_correct_str(string):
    sum=0
    for bracket in string:
        if bracket=='(':
            sum-=1
        else:
            sum+=1
        if sum>0:
            return False
    return sum==0

def reverse_str(string):
    answer=''
    for bracket in string:
        if bracket=='(':
            answer+=')'
        else:
            answer+='('
    return answer

def solution(p): #2์ด์ƒ ์ง์ˆ˜
    if len(p)==0:
        return ''
    idx=0
    while idx<len(p):
        u, v=split_balance(p)
        if is_correct_str(u)==True:
            return u+solution(v)
        else:
            return '('+solution(v)+')'+reverse_str(u[1:-1])
728x90