본문 바로가기
알고리즘/프로그래머스

짝지어 제거하기

by 매화of사군자 2021. 7. 20.

문제를 읽은 후 든 생각

- 정규식으로 처리하자

 

문제 풀이 중 겪은 어려움

- 정규식 매칭이 내 마음대로 되지 않음

p = re.compile('(\w)\1')
result = p.match('baabaa')
print(result)

result에 None이 들어있다....

내 예상은 aa에 해당하는 두 위치(1-2, 4-5)가 들어있어야 한다고 생각한다.

 

정규식 매칭 방식을 잘못 알고있는 것 같아서 regexr.com 돌려보았다.

내가 원하는 곳을 잘 찾는 것 같은데... 코드에서 뭘 잘못한걸까? 잘 모르겠다!!

 


07월 21일 추가작성

이스케이프(백슬래쉬) 문제였다.

다음과 같이 작성하면 된다.

p = re.compile('(\\w)\\1') # 둘 중에 편한대로 사용
// p = re.compile(r'(\w)\1')
result = p.finditer('baabaa')
print(result)

match 함수가 동작하지 않는 이유는 모르겠다. 그렇기 때문에 finditer를 사용한 후 for문을 사용하여 원하는 문자열을 찾을 수 있었다.


 

해결방안

- 같은 문자가 2개 붙어있는 짝을 찾는 문제이므로 스택을 이용하기로 했다.

 

코드

더보기

def solution(s):
    stack = []
    
    for alpha in s:
        if len(stack) == 0:
            stack.append(alpha)
        elif stack[-1] == alpha:
            stack.pop()
        else:
            stack.append(alpha)
    
    if stack:
        return 0
    
    return 1

 

고찰

- 정규식으로 풀면 시간초과가 난다고 하는데 그래도 풀어보고 싶다.

- 정규식에 대해 좀 더 알아볼 필요를 느꼈다.

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

더 맵게 level2  (0) 2021.07.24
오픈채팅방 level2  (0) 2021.07.23
기능개발 - level2  (0) 2021.07.21
[1차] 다트 게임 (파이썬)  (0) 2021.07.14
숫자 문자열과 영단어 (파이썬)  (0) 2021.07.13

댓글