2021. 4. 25. 15:29ใ๐ฑ Algorithm/Else
์ ๊ทผ
๋ณต์กํด ๋ณด์ด์ง๋ง, ๋ฌธ์ ์ ์๊ตฌ์กฐ๊ฑด์ ์ฐจ๋ก๋ก ๊ตฌํ ํ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค..
๋จ, ํ๋์ ํจ์์ ๋ชจ๋ ๊ฒ์ ํด๊ฒฐํ๋ คํ๋ฉด ๋ณต์กํ๊ธฐ ๋๋ฌธ์ 3๊ฐ์ ํจ์๋ก ๋ถ๋ฆฌํ์ฌ ์๊ตฌ์ฌํญ์ ์ฝ๋๋ก ์์ฑํฉ๋๋ค.
๋ฌธ์ ์๊ตฌ ์ฌํญ
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. ์์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
๋ฌธ์ ์๊ตฌ์ฌํญ์ ์ฝ๋๋ก ๊ตฌํ
1. ์ ๋ ฅ์ด ๋น ๋ฌธ์์ด์ธ ๊ฒฝ์ฐ, ๋น ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
def solution(p):
return p if correct(p) else recursive(p)
def recursive(sentence):
if sentence == '':
return '' # ์
๋ ฅ ๋ฌธ์์ด์ด ๊ณต๋ฐฑ์ด๋ฉด, ๊ณต๋ฐฑ return
u, v = detatch(sentence)
if correct(u):
return u + recursive(v)
else:
return '(' + recursive(v) + ')' + ''.join(list(map(lambda x: ")" if x =="(" else "(", u[1:-1])))
2. ๋ฌธ์์ด w๋ฅผ ๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด" u, v๋ก ๋ถ๋ฆฌํฉ๋๋ค. ๋จ, u๋ "๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด"๋ก ๋ ์ด์ ๋ถ๋ฆฌํ ์ ์์ด์ผ ํ๋ฉฐ, v๋ ๋น ๋ฌธ์์ด์ด ๋ ์ ์์ต๋๋ค.
- ๋ถ๋ฆฌํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ์ฐ์ queue๋ก ๋ง๋ญ๋๋ค.
- u๊ฐ ์ฐ์ ๊ท ํ์กํ ๋ฌธ์์ด์ ํํ๋ฅผ ๋๋ฉด ๊ณง ๋ฐ๋ก return ์์ผ u, v๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
def detatch(sentence):
temp_que = deque(sentence)
left, right = 0, 0
u, v = '', ''
while temp_que:
u += temp_que.popleft()
if u[-1] == "(":
left += 1
else:
right += 1
if left == right:
break
v = ''.join(list(temp_que))
return u, v
3. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด" ์ด๋ผ๋ฉด ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ๋ค์ ์ํํฉ๋๋ค.
3-1. ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ u์ ์ด์ด ๋ถ์ธ ํ ๋ฐํํฉ๋๋ค.
- correct() ํจ์์์ True๊ฐ ๋ฆฌํด๋ ๋์ ๊ทธ๋ ์ง ์์ ๋๋ฅผ ๋ถ๊ธฐ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ฌธ์์ด u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ์ผ ๋, v ๋ฌธ์์ด์ ๋ํด ๋ค์ recursive() ํจ์์ ์ธ์๋ก ๋ฃ์ด ํธ์ถํฉ๋๋ค. (์ฌ๊ท ๊ตฌ์กฐ)
def correct(sentence):
stack = []
for sen in sentence:
if sen == "(":
stack.append(sen)
else:
if len(stack) == 0:
return False
else:
stack.pop()
return True if len(stack) == 0 else False
def recursive(sentence):
if sentence == '':
return ''
u, v = detach(sentence)
if correct(u):
return u + recursive(v)
else:
# return '(' + recursive(v) + ')' + reverse(u[1:-1])
return '(' + recursive(v) + ')' + ''.join(list(map(lambda x: ")" if x =="(" else "(", u[1:-1])))
4. ๋ฌธ์์ด u๊ฐ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ด ์๋๋ผ๋ฉด ์๋ ๊ณผ์ ์ ์ํํฉ๋๋ค.
4-1. ๋น ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ก '('๋ฅผ ๋ถ์ ๋๋ค.
4-2. ๋ฌธ์์ด v์ ๋ํด 1๋จ๊ณ๋ถํฐ ์ฌ๊ท์ ์ผ๋ก ์ํํ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ ๋๋ค.
4-3. ')'๋ฅผ ๋ค์ ๋ถ์ ๋๋ค.
4-4. u์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ณ , ๋๋จธ์ง ๋ฌธ์์ด์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ด์ ๋ค์ ๋ถ์ ๋๋ค.
4-5. ์์ฑ๋ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ดํธ๊ฐ ์๋๋ฏ๋ก else ์ดํ์ ์ฝ๋๋ฅผ ์ํํฉ๋๋ค.
- 4-4 ์๊ตฌ ์ฌํญ์ ์ฃผ์ํด์ผํ๋๋ฐ, u[1:-1] ๋ฌธ์์ด์ ๊ทธ์ ๋ค์ง๋ ๊ฒ์ด ์๋, u[1:-1]์ ์์ ํ๋ํ๋์ ๊ดํธ๋ฅผ ๋ค์ง์ด ์ค์ผํฉ๋๋ค.
- ์ด ์ฌํญ์ ๋๋ค์์ ์ด์ฉํ์ฌ ๊ตฌํํ์ต๋๋ค.
def recursive(sentence):
if sentence == '':
return ''
u, v = detach(sentence)
if correct(u):
return u + recursive(v)
else:
return '(' + recursive(v) + ')' + ''.join(list(map(lambda x: ")" if x =="(" else "(", u[1:-1])))
์ ์ฒด ์ฝ๋
from collections import deque
def detatch(sentence):
temp_que = deque(sentence)
left, right = 0, 0
u, v = '', ''
while temp_que:
u += temp_que.popleft()
if u[-1] == "(":
left += 1
else:
right += 1
if left == right:
break
v = ''.join(list(temp_que))
return u, v
def recursive(sentence):
if sentence == '':
return ''
u, v = detatch(sentence)
if correct(u):
return u + recursive(v)
else:
return '(' + recursive(v) + ')' + ''.join(list(map(lambda x: ")" if x =="(" else "(", u[1:-1])))
def correct(sentence):
stack = []
for sen in sentence:
if sen == "(":
stack.append(sen)
else:
if len(stack) == 0:
return False
else:
stack.pop()
return True if len(stack) == 0 else False
def solution(p):
return p if correct(p) else recursive(p)
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค [lv4] N-Queen ํ์ด์ฌ (0) | 2021.05.16 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ ํ์ด์ฌ (0) | 2021.05.15 |
ํ๋ก๊ทธ๋๋จธ์ค [lv3] ๋คํธ์ํฌ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv2] ์คํ์ฑํ ๋ฐฉ ํ์ด์ฌ (0) | 2021.04.25 |
ํ๋ก๊ทธ๋๋จธ์ค [lv3] ๋จ์ด๋ณํ ํ์ด์ฌ (0) | 2021.04.25 |