본문 바로가기
공부/Algorithm

[HackerRank] Balanced Brackets

by 김샤랑 2022. 3. 11.

[HackerRank] Balanced Brackets


  • 문제 링크

https://www.hackerrank.com/challenges/balanced-brackets/problem?isFullScreen=true 

 


  • 생각
더보기

닫는 괄호까지 달린다.

닫는 괄호가 나오면 앞부분을 자른다. 앞부분은 sliced

앞부분에서 제일 뒤에 있는 연괄호를 찾는다(역정렬)

앞부분에서 연 괄호를 찾는다

짝을 맞췄으니 pop으로 버린다

반복반복

 

절대 좋은 코드는 아니라고 생각하기에 다양하게 시도해보길 바란다.

같이 알고리즘 문제를 풀던 지인분의 코드는 정말 깔끔하고 참신해서 더 분발해야겠다.

지인분은 .replace()를 이용해서 10줄이하로 푸셨다. 굿굿


  • 코드
def isBalanced(s):
    
    s = list(s)
    result = "YES"
    
		#store
    openList = ['(', '{','[']
    closeList = [')', '}',']']

        
    while(len(s)>0):
        
        a = list()
        if(')' in s):
            a.append(s.index(')'))
        if('}' in s):
            a.append(s.index('}'))
        if(']' in s):
            a.append(s.index(']'))
        
        if(len(a) == 0):
            result = "NO"
            break

        realMin = min(a)
        bracketIndex = closeList.index(s[realMin]) #index
        
        closeIndex = s.index(closeList[bracketIndex])
        sliced=list()
        sliced = s[0: closeIndex]
        
        if(not openList[bracketIndex] in sliced):
            result = "NO"
            break
        
        sliced.reverse()
        reverseOpenIndex = sliced.index(openList[bracketIndex])
        openIndex = len(sliced) -1 - reverseOpenIndex 
        
        if(closeIndex-openIndex ==1):
            s.pop(closeIndex)
            s.pop(openIndex)

        else:
            result = "NO"
            break
            
    return result

 

 

 

'공부 > Algorithm' 카테고리의 다른 글

[LeetCode] Implement Trie  (0) 2022.03.21
[LeetCode] Two sum  (0) 2022.03.15
[HackerRank] Jesse and Cookies  (0) 2022.03.09
[HackerRank] Equal stacks  (0) 2022.03.08
[HackerRank] Merge two sorted linked lists  (0) 2022.03.07

댓글