์ฝ๋ฉ ํ ์คํธ ์ฐ์ต - 2020 KAKAO BLIND RECRUITMENT
<๊ดํธ ๋ณํ>
๋ฌธ์ ์ค๋ช
์นด์นด์ค์ ์ ์ ๊ฐ๋ฐ์๋ก ์ ์ฌํ "์ฝ"์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ก๋ถํฐ ๊ฐ๋ฐ ์ญ๋ ๊ฐํ๋ฅผ ์ํด
๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋ฌธ์ ์ ์ ๋ฐ๊ฒฌํ๊ณ ์์ ํ๋ผ๋ ์ ๋ฌด ๊ณผ์ ๋ฅผ ๋ฐ์์ต๋๋ค. ์์ค๋ฅผ ์ปดํ์ผํ์ฌ ๋ก๊ทธ๋ฅผ ๋ณด๋ ๋๋ถ๋ถ ์์ค ์ฝ๋ ๋ด ์์ฑ๋ ๊ดํธ๊ฐ ๊ฐ์๋ ๋ง์ง๋ง ์ง์ด ๋ง์ง ์์ ํํ๋ก
์์ฑ๋์ด ์ค๋ฅ๊ฐ ๋๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
์์ ํด์ผ ํ ์์ค ํ์ผ์ด ๋๋ฌด ๋ง์์ ๊ณ ๋ฏผํ๋ "์ฝ"์ ์์ค ์ฝ๋์ ์์ฑ๋ ๋ชจ๋ ๊ดํธ๋ฅผ ๋ฝ์์
์ฌ๋ฐ๋ฅธ ์์๋๋ก ๋ฐฐ์น๋ ๊ดํธ ๋ฌธ์์ด์ ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ฐํ๋ ค๊ณ ํฉ๋๋ค.
์ฉ์ด์ ์ ์
'('์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์์ ๊ฒฝ์ฐ, '('์ ๊ฐ์์ ')'์ ๊ฐ์๊ฐ ๊ฐ๋ค๋ฉด
์ด๋ฅผ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ '('์ ')'์ ๊ดํธ์ ์ง๋ ๋ชจ๋ ๋ง์ ๊ฒฝ์ฐ์๋ ์ด๋ฅผ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์๋ฅผ ๋ค์ด, "(()))("์ ๊ฐ์ ๋ฌธ์์ด์ "๊ท ํ ์กํ ๊ดํธ ๋ฌธ์์ด"์ด์ง๋ง "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ ์๋๋๋ค. ๋ฐ๋ฉด์ "(())()"์ ๊ฐ์ ๋ฌธ์์ด์ "๊ท ํ ์กํ ๊ดํธ ๋ฌธ์์ด" ์ด๋ฉด์ ๋์์ "์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด"์ ๋๋ค.
'('์ ')' ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด 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 ํ๋ฉด ๋ฉ๋๋ค.
๋ฌธ์ ํ์ด
- my solution
def isbalance(p): #๊ท ํ์ก์ธ ๊ดํธ ๋ฌธ์์ด: u,v
u,v=[],[]
for i in range(1,len(p)+1):
if p[:i].count("(") == p[:i].count(")"):
u=p[:i]
v=p[i:]
break
return u,v
def isright(x): #์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด
stack=[]
result=True
for i in x:
if i=='(':
stack.append(i)
else:
if len(stack)!=0:
stack.pop()
else:
result=False
return result
def recur(p):
answer=''
if len(p)!=0: # ์
๋ ฅ์ด ๋น ๋ฌธ์์ด์ด ์๋ ๊ฒฝ์ฐ
u,v=isbalance(p) # ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด u,v๋ก ๋ถ๋ฆฌ
if isright(u)==True: # u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด
answer+=u
if len(v)!=0:
answer += recur(v)
else: # u๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ์๋๋ผ๋ฉด
answer='('+recur(v)+')'
x=u[1:len(u)-1] # ์ฒซ๋ฒ์งธ์ ๋ง์ง๋ง ๋ฌธ์ ์ ๊ฑฐ
for i in x: # ๋๋จธ์ง ๋ฌธ์์ด์ ๊ดํธ ๋ฐฉํฅ์ ๋ค์ง์ด์ ๋ถ์ด๊ธฐ
if i=='(':
answer+=')'
else:
answer+='('
return answer
def solution(p):
answer = ''
answer=recur(p)
return answer
๋ช ๋ฒ์ด๋ ์ด ๋ฌธ์ ๋ฅผ ๋ดค์์ง๋ง ๊ฒ๋จน๊ณ ๋์ ํ์ง ์์๋ ๋ฌธ์ ์ด๋ค
์ด๋ฒ์ ๋ฌธ์ ๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์ด๋ดค์ง๋ง ์ฒ์์๋ ๋๊ณต ์ง์ง... ๐ฅ
ํ์ง๋ง ์กฐ๊ธ์ ํํธ๋ ์ป์ผ๋ฉด์ ๋ฌธ์ ์ ๋์์๋ ์กฐ๊ฑด์ ํ๋์ฉ ํด๊ฒฐํด๊ฐ๊ธฐ ์์!
1) ์๋์ ๊ฐ์ด ํจ์๋ฅผ 3๊ฐ๋ก ๊ตฌํ
โ ๊ท ํ ์กํ ๊ดํธ ๋ฌธ์์ด๋ก ๋ถ๋ฆฌ โก ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ํ๋ณ โข ์กฐ๊ฑด์ ๋ง๊ฒ ์ฌ๊ท๋ฅผ ์ํ ํจ์
์กฐ๊ธ ๋ง์ด ํจ์๋ฅผ ๋๋ ๊ฒ ๊ฐ์ง๋ง ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ ๊ธฐ์ค์ ๋ง์ถฐ ๋๋ ๋ณด์๋ค
2) ํจ์ ์ค๋ช
โ ๊ท ํ์กํ ๊ดํธ ๋ฌธ์์ด๋ก ๋ถ๋ฆฌ: count๋ฅผ ํ์ฉํ์ฌ ๊ฐ์๊ฐ ๊ฐ์ ๋ u, v๋ฅผ ๋ถ๋ฆฌ
โก ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด ํ๋ณ: stack์ ํ์ฉํ์ฌ '(' ์ผ ๋ ์ถ๊ฐ, ')'์ผ ๋ ์ ๊ฑฐํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ธ์ง ํ๋ณ
โข ์กฐ๊ฑด์ ๋ง๊ฒ ์ฌ๊ท๋ฅผ ์ํ ํจ์: ๋ฌธ์ ์์ ๋งํ 1~4์ ๊ณผ์ ์ ๊ตฌํ
์๊ฐ๐ค
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ์ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด๊ณ ๋น๊ตํด๋ณด๋ ์๊ฐ์ ๊ฐ์ก๋ค.
์กฐ๊ธ ๋ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์์ง๋ง, ์ค๋์ ๋๋ก์๋ ์ด๊ฒ ์ต์ ์ด์๋ค๋ ์๊ฐ๋ ๋ค์๋ค.
๋ด๊ฐ ์๊ฐํ๊ธฐ์ ์ด ๋ฌธ์ ์ ํฌ์ธํธ๋
1) ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ๋ฐ๋ผ์ ๊ตฌํํ๋ ๋ฅ๋ ฅ
์ด์๋ ๊ฒ ๊ฐ๋ค.
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges
'๐Algorithm > ๐ฅprogrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers] [3์ฐจ] n์ง์ ๊ฒ์ - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.09.08 |
---|---|
[programmers] ๊ดํธ ํ์ ํ๊ธฐ - ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง ์์ฆ2 (0) | 2021.09.07 |
[programmers] [3์ฐจ] ํ์ผ๋ช ์ ๋ ฌ - 2018 KAKAO BLIND RECRUITMENT (0) | 2021.09.04 |
[programmers] ํํ -2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด์ญ (0) | 2021.09.04 |
[programmers] ์ด์ค์ฐ์ ์์ํ (0) | 2021.08.25 |