데이터사이언스 기록기📚

[프로그래머스] Level 2_짝지어 제거하기(2017 팁스타운) 본문

Coding Test/프로그래머스(Python)

[프로그래머스] Level 2_짝지어 제거하기(2017 팁스타운)

syunze 2022. 10. 6. 23:30

📌문제 유형

2017 팁스타운

 

📌문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌나의 문제풀이

1차 시도

 - DFS 사용하니 런타임 에러 발생

def solution(s):
    def DFS(s):
        before_s = s
        
        for i in range(1,len(s)):
            if s[i-1] == s[i]:
                del s[i-1:i+1]
            break
            
        after_s = s
        
        if len(s) == 0:
            return 1
        elif len(before_s) == len(after_s) and set(before_s) != len(after_s):
            return 0
        else:
            DFS(s)
            
    return DFS(s)
2차 시도(통과)

 - 문자 하나씩 비교 후, 겹치지 않으면 word에 넣고 겹치면 word에서 삭제

  • 짝지어 제거하면 word의 크기가 0일 수 있으므로, 이를 if조건에 포함
def solution(s):
    word = []
    word.append(s[0])
    
    for i in range(1,len(s)):
        if len(word) != 0 and word[-1] == s[i]:
            word.pop()
        else:
            word.append(s[i])
            
    if len(word) == 0:
        return 1
    else:
        return 0

 

📌다른사람의 문제풀이

 1) answer이 비어있으면 값 넣기

  - answer가 0이 되는 경우 없앤 것 

def solution(s):
    answer = []
    for i in s:
        if not(answer):
            answer.append(i)
        else:
            if(answer[-1] == i):
                answer.pop()
            else:
                answer.append(i)    
    return not(answer)

 

📌리뷰

- index 오류가 날때는 list가 비어있는지 확인하기

728x90
Comments