종식당

[프로그래머스 lv.2] 짝지어 제거하기 본문

프로그래머스

[프로그래머스 lv.2] 짝지어 제거하기

종식당 2024. 7. 16. 18:21
728x90
반응형

https://school.programmers.co.kr/tryouts/72055/challenges


  • 문제 설명
    문자열 s가 주어지면 문자열에서 알파벳 두 개가 붙어있는 짝을 찾아 제거해 준다. 만약 baccab라고 했을 때 먼저 cc를 제거해 baab가 된다. 다음으로 aa를 제거해 bb가 되고 마지막으로 bb를 제거해 문자열을 모두 삭제한다. 이때 문자열이 모두 제거되면 1을 제거되지 않으면 0을 반환한다.

 

  • 제출 코드
def solution(s):
    answer = []
    answer.append(s[0])
    for i in s[1:]:
        if len(answer) == 0:
            answer.append(i)
        elif answer[-1] == i:
            answer.pop()
        else:
            answer.append(i)
    return 1 if len(answer) == 0 else 0

 

짝을 지어서 제거한다는 키워드에서 스택을 생각해내야 할 것 같다. 빈 리스트를 만들어 먼저 문자열의 첫 글자를 넣어준다. 그리고 두 번째 글자부터 for문을 통해 리스트에 차례대로 넣을 것이다. 처음에는 리스트가 비어있을 때를 생각하지 않았는데 만약 이러면 첫 글자와 두 번째 글자가 같을 때 pop을 통해 제거될 것이니 리스트가 비어있게 된다. 그럼 그다음 for문에서 elif 문장에서 answer [-1]에서 오류가 나게 된다. 그래서 비어있을 때는 무조건 문자를 리스트에 넣어주었다. 
리스트의 마지막 문자와 다음으로 들어올 문자가 같으면 해당 문자를 리스트에서 pop해 준다. 같지 않다면 그대로 리스트에 넣어준다. 이러고 난 후 리스트의 길이에 따라서 조건에 맞게 반환해 주면 된다.

728x90
반응형