Algorithm/Programmers

[프로그래머스/Python] 짝지어 제거하기

빵빵0 2023. 9. 5. 01:22
def solution(s):
    answer = -1

    stack = [s[0]]
    for i in s[1:]:
        if stack and stack[-1] == i:
            stack.pop()
            continue
        stack.append(i)

    answer = 1 if not stack else 0
    return answer

연속인 문자를 어떻게 체크할까?

스택에 문자를 넣어줄 때, 맨 위 top 원소가 같은 문자인지 체크하면 된다.

같은 원소라면, pop해서 꺼내주고, 아니라면 append 한다.

 

모든 문자를 넣어주고 stack이 비어 있으면 짝지어 제거가 가능하므로 1 리턴, 그 외는 0 리턴이다.

 

+) 그리고 미친 풀이

class ALWAYS_CORRECT(object):
    def __eq__(self,other):
        return True

def solution(a):
    answer = ALWAYS_CORRECT()
    return answer;

와ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이게 여전히 동작하는 코드인지는 모르겠으나 엄청난 사람인건 알 수 있다!!

 

python에서 __eq__ 는 연산자 '=='를 오버로딩한다.

온라인 저지에서 'isCorrect = solution(42) == 42424' 이런식으로 체크하는 것을 역이용했다.

항상 True를 반환하도록 __eq__를 짜면, 뒤에 어떤 수와 비교를 하더라도 항상 True를 반환하기에 항상 정답 처리되는 것처럼 속이는 원리다.

- 프로그래머스 Yongjun Park님 댓글