[프로그래머스] Lv.2 짝지어 제거하기 (Python)

seulzzang·2022년 10월 14일
0

코딩테스트 연습

목록 보기
29/44
post-thumbnail

📍 문제

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

📍 풀이

💻 첫번째 코드(오답)

def solution(s):
    s = list(s)
    i = 0
    while i < len(s) - 1:
        if s[i] == s[i+1]:
            s.pop(i)
            s.pop(i)
        if len(s) == 0:
            return 1
        else:
            return 0
        i += 1

이렇게 하면 테스트케이스 1번에서 오류가 난다. 질문하기 탭에서 자바로 풀이하신 분이 스택으로 풀이했다고 하셔서 나도 스택을 사용해보기로 했다.

💻 두번째 코드(스택, 정답)

def solution(s):
    stack = [s[0]]
    
    for i in s[1:]:
        if stack and i == stack[-1]:
            stack.pop()
        else:
            stack.append(i)

    return 0 if len(stack) else 1

스택에 제일 첫번째 문자를 담아주고, 그 이후부터 나머지 문자들과 비교를 진행한다. 만약의 스택의 최상단 원소가 i와 동일하다면 스택에서 pop해주고, 아니라면 해당 문자를 스택에 append해준다.
if stack and i == stack[-1]에서 stack이 비지 않았을 경우도 추가해줘야 List out of Range오류가 뜨지 않는다ㅎㅎ 빈 스택에서 pop을 하지 않도록 조건을 잘 걸어주자.

다른사람 풀이도 나와 비슷해서 오늘은 다른사람 풀이 생략


뭔가 이제 이런 문제를 보면 스택/큐가 떠오르는 것이 문제를 좀 풀어본 결실이 드디어 나타나는 것 같다.. 예전에는 문제를 보면 도대체 이게 왜 스택이랑 큐를 이용하는거지? 싶다는 생각이 많이 들었는데 ㅎㅎㅎ 조금이나마 더 발전한 것 같아서 뿌듯하다😊

profile
중요한 것은 꺾이지 않는 마음

0개의 댓글