코딩테스트/프로그래머스

[프로그래머스] [Level 2] 짝지어 제거하기

박소민 2023. 1. 20. 03:58
짝지어 제거하기
 

프로그래머스

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

programmers.co.kr

 

  • 내 풀이
    • 실행됐지만 테케 시간초과, 출력크기 초과로 에러
def remove(sss):
    stop=0
    result=""
    for i,s in enumerate(sss):
        if stop==1:
            stop=0
            continue

        if i!=len(sss)-1:
            if sss[i+1]==s:
                stop=1
                continue
        result+=s
        
    return result
        
def solution(string):
    cnt=0
    n=0
    
    while cnt!= len(string):
        #while문 실행 횟수
        n+=1
        cnt=len(string)
        string=remove(string)
    
    if n==1: return 0
    if string:
        return 0
    else:
        return 1

 

  • 다른 사람 풀이
    • 📍변하는 하나의 값을 계속 확인해야하므로 stack 사용
      • 스택에 변한 값들 쌓아서 계속 확인
    • stack을 이용해서 맞는 쌍이 나오면 pop하는 형식
      • 처음 값 스캔할때 중복되는 값들은 바로 지워버리고 추가를 안하기 때문에
      • 앞글자랑 뒤에나오는 글자가 겹치면 stack[-1]==i 로 체크가 가능함
      • -> s 한번 스캔으로 다 해결 가능
def solution(s): 
    stack = []
    for i in s:
        if len(stack) == 0: stack.append(i)
        elif stack[-1] == i: stack.pop()
        else: stack.append(i)
    if len(stack) == 0: return 1
    else: return 0