본문 바로가기

알고리즘/프로그래머스

[Lv2] 짝지어 제거하기(python)

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/12973?language=python3 

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

 

 

2. 풀이 과정

- stack을 사용해서 stack의 top 문자와 s[i]가 같으면 stack.pop()하고 아니면 stack.append()를 해가다가 최종 stack이 빈 stack이면 1을 리턴.

 

- "붙어있어야 한다 + 붙어있는게 사라졌을 때, 새로운 짝이 생긴다 (b aa b -> bb) "

-> aa가 사리지고 나서 새로운 쌍을 확인하기 위해선 사라진 문자의 직전 문자를 봐야 한다. 

-> 쌍을 이루지 않는 직전 문자들을 계속 순서대로 기억해야 함

-> stack을 사용한다.의 과정으로 stack을 사용한 풀이라는 걸 유추하기!

 

 

3. 실수한 내용 & 새로 안 내용

- list를 사용한 stack에는 top(), size()대신 각각 stack[-], len(stack)을 사용할 것

- for문 돌릴 때 매번 stack.empty()를 하기 번거로울 땐 stack 선언 시 사용되지 않는 대상 (위 문제에선 대문자 알파벳)을 하나 넣어두면 stack.empty()확인 안해도 됨!

 

4. 코드

더보기
# 입력 범위가 100만이므로 nlogn으로 풀어야 함
def solution(s):
    answer = -1   
    stack = ["A"]
    
    for x in s:
        if stack[-1] == x:
            stack.pop()
        else:
            stack.append(x)
    
    if len(stack) == 1:
        return 1
    else:
        return 0
    return answer

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Lv2] 뉴스 클러스터링(python)  (0) 2021.08.23
[Lv2] 캐시(python)  (0) 2021.08.17
[Lv2] 튜플(python)  (0) 2021.08.02
[Lv2] 거리두기 확인하기(python)  (0) 2021.07.29
[Lv2]괄호 변환(python)  (0) 2021.07.29