프로그래밍 이야기/파이썬 코딩 테스트 스터디

파이썬 코딩테스트 스터디 3주차 #4 - 짝지어 제거하기

hoony926 2024. 7. 7. 11:55

 

 

 

 

문제 분석하고 풀기

이중 반복문으로 문제를 해결하려는 경우가 많다. 

(나도 보자마자 이중 반복문을 생각했다.) 근데 무조건 시간 초과 발생한다고 한다. 

그리고 심지어 Stack 개념으로 해결하는게 훨씬 코딩하기가 쉽다(개인적으로)

 

 

 

 

내가 짠 코드(Version 1)

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

 

이렇게 테스트를 돌려봤을 때 잘 돌아가서

"헐 대박, 한 1분만에 짰는데 잘 돌아가네? 나 쫌 늘었는데?

 

싶었는데 역시나...

 

 

실패가 뜬다..

그래서 우선 책의 코드를 보니

내가 빼먹은 케이스가 바로 떠올랐다. 

빼먹은 케이스 조건
1. stack에 이미 데이터가 있는데
2. stack[-1] 마지막 데이터와 i 즉 이제 들어오는 문자열과 다른 경우 append(i)

이 걸 빼먹었었다.

 

 

내가 짠 코드(Version 2)

def solution(s):
    answer = 0
    stack = []
    
    for i in s : 
        if not stack : 
            stack.append(i)
        else:
            if stack[-1]==i:
                stack.pop()
            else :			#이 부분을 처음에 처리를 안해줬었다.
                stack.append(i)
        
    if not stack:
        answer = 1
        
    return answer

 

 

잘 돌아갔다.

 

그리고 

책에 나온 코드

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

 

깔끔하네. 확실히 :)

 

https://school.programmers.co.kr/learn/courses/30/lessons/12973

 

프로그래머스

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

programmers.co.kr

 

감사합니다.