Notice
														
												
											
												
												
													Recent Posts
													
											
												
												
													Recent Comments
													
											
												
												
													Link
													
											
									| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- 메모이제이션
- fibo
- dynamicProgramming
- 피보나치수열
- 다이나믹프로그래밍
- 탑다운
- 주석
- XML주석
- ㅂ
- 오픽점수잘받는방법
- 영어말하기
- XML
- 디피
- 바텀업
- 오픽노잼
- 오픽가격
- topdown
- stack 스택
- 이진탐색 #나무 자르기
- 오픽노잼공부방법
- English
- 안드로이드주석
- 오픽
- 오픽공부법
- dp
- 영어회화
- opic
- 이진탐색
- 안드로이드
													Archives
													
											
									RUBY
[카카오] 괄호 변환 본문
출처:: 2020 카카오 신입 공채 1차 https://programmers.co.kr/learn/courses/30/lessons/60058
분류:: 구현
1. 문제 이해 및 해결과정
2. 풀이방법
1. 구현
#올바른 괄호 문자열인지 판단
def paren(w):
    cnt=0 
    for x in w:
        if x=='(':
            cnt+=1
        else:
            if cnt==0:
                return False
            cnt-=1
    return True
#균형잡힌 괄호 문자열인지 
def balanced_paren(p):
    leng=len(p)
    left=right=0
    for i in range(leng):
        if p[i]=='(':
            left+=1
        else:
            right+=1
        if left==right:
            return i
        
def solution(p): #p는 균형잡힌 괄호 문자열
    empty = ''
    leng=len(p)
    left=right=0
    if leng==0: #빈 문자열이면, 빈 문자열 반환
        return empty
    index=balanced_paren(p)
    u=p[:index+1]
    v=p[index+1:leng]
    if paren(u): #올바른 괄호 문자열이면
        empty= u + solution(v) #u에 이어 붙인 후 반환 
    else:
        empty='('
        empty+= solution(v)
        empty+= ')'
        u=u[1:len(u)-1] 
        nu=""
        for x in u:
            if x==')':
                nu+='('
            else:
                nu+=')'
        empty+=nu
    return empty2. 같은 풀이
def balanced_paren(p):
    cnt=0
    for i in range(len(p)):
        if p[i]=='(':
            cnt+=1
        else:
            cnt-=1
        if cnt==0:
            return i 
        #전제가 균형잡힌 문자열을 받은 것이므로 return 이 없을 순 없음 
def paren(p):
    cnt=0
    for x in p:
        if x=='(':
            cnt+=1
        else:
            if cnt==0:
                return False
            cnt-=1
    return True
def solution(p):#p는 균형잡힌 문자열
    answer = ''
    if p=='':
        return answer
    index= balanced_paren(p)
    u=p[:index+1]
    v=p[index+1:]
    
    if paren(u):
        answer=u+solution(v)
    else: #올바른 문자열이 아니면
        answer='('
        answer+=solution(v)
        answer+=')'
        u=list(u[1:-1])
        for i in range(len(u)):
            if u[i]==')':
                u[i]='('
            else:
                u[i]=')'
        answer+="".join(u)
    return answer3. 오답원인
4. 알게된 점
'PS > This' 카테고리의 다른 글
| [카카오] 가사 검색 (0) | 2020.09.09 | 
|---|---|
| 문자열 재정렬 (0) | 2020.09.08 | 
| [백준] 병사 배치하기 (0) | 2020.09.01 | 
| [백준] 퇴사 | 삼성 (0) | 2020.08.30 | 
| [백준] 뱀 | 삼성 (0) | 2020.08.27 | 
			  Comments
			
		
	
               
           
					
					
					
					
					
					
				 
            