algorithm/프로그래머스 문제

[LV2]짝지어 제거하기

장경훈 2022. 7. 11. 15:04
 
[LV2]짝지어 제거하기 링크
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다.
www.programmers.co.kr

 

문제해설

이 문제는 반복문을 사용하여 각각의 문자를 스택에 집어넣어 비교하여 서로 같은 문자이면 제거하여 최종적으로 스택에 문자가 남아있으면 0을반환 그렇지 않으면 1을 반환하면 되는 문제이다. 이 문제에서 길이가 홀수인 문자는 항상 스택에 문자가 남을 수 밖에 없으므로 0을 반환하게 처리하였다.

def solution(s):
    stack=[] #스택
    for i in range(len(s)): #문자열의 길이만큼 반복
        if len(s)%2==1: #만약 문자열 길이가 홀수이면 반복문 중단후 0을반환 
            return 0
        if len(stack)==0:# 스택에 아무것도 없으면 문자를 집어넣는다
            stack.append(s[i])
        else: #그렇지 않으면
            if stack[-1]==s[i]: #비교하여서 같은문자이면 제거한다 
                stack.pop()
            else: # 만약  같은 문자가 아니라면 스택에 보관한다
                stack.append(s[i])
    if len(stack)==0: #스택이 비어있으면 1을 반환
        return 1
    else: #그렇지 않으면 0을반환한다
        return 0

 

문제를 풀면서 아쉬웠던 점

 

처음 이 문제를 봤을때 바로 스택이 생각나지 않았고 replace함수를 사용하여서 겹치는 부분을 일일이 제거해주는 방법을 사용했다. 하지만 이렇게 한 결과 시간초과가 생기며 상당히 비효율적인 코드가 만들어졌다. 알고리즘 실력이 많이 부족하다고 느꼈다... 더 열심히 해야겠다

 

'algorithm > 프로그래머스 문제' 카테고리의 다른 글

[프로그래머스 LV2] 튜플  (0) 2022.07.14
[LV2]위장  (0) 2022.07.13
[LV2]전화번호 목록  (0) 2022.07.13
[LV2]조이스틱  (0) 2022.07.12
[LV2]타겟 넘버  (0) 2022.07.11