[프로그래머스] Lv2 - 짝지어 제거하기

김멉덥·2023년 8월 30일
0

알고리즘 공부

목록 보기
99/171
post-thumbnail
post-custom-banner

문제

프로그래머스 2017 팁스타운


코드 구현

def solution(s):
    answer = 0

    ### 실패 코드 (효율성 똥망)
    # for i in range(len(s)):
    #     if(len(s) == 0):
    #         break
    #     if (i >= len(s)-1):
    #         if (len(s) == 2 and s[0] == s[1]):
    #             s = s.replace(s[0] * 2, "")
    #         else:
    #             break
    #     elif (s[i] == s[i + 1]):
    #         s = s.replace(s[i] * 2, "")

    stack = []
    for i in range(len(s)):
        stack.append(s[i])      # stack에 하나씩 넣어주면서
        if(len(stack) >= 2 and stack[-2] == stack[-1]):     # stack에 들어있는 요소들 중 가장 마지막 2개가 같은지 비교
            stack.pop(-1)       # 같다면 짝지어서 제거
            stack.pop(-1)

    if (len(stack) == 0):       # stack이 다 짝지어져서 비어있다면 1
        answer = 1
    if (len(stack) != 0):       # 짝지어지지 않아서 요소가 남아있다면 0
        answer = 0

    return answer

풀이

  • 처음에 어차피 짝지어지는건 다 제거되므로 문자열 replace로 코드를 짰는데 효율성에서 실패하는걸 보고 그냥 스택을 이용해야겠다고 생각했다.
  • 스택에 하나씩 넣어주면서 가장 마지막 요소 2개를 비교하는데, 만약 같다면 스택에서 제거해준다.
  • 모든 요소들을 다 돌아서 for문이 끝나고나서 스택이 비어있으면 1, 비어있지 않다면 0을 리턴해준다.

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글