기록하는삶

[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 짝지어 제거하기 본문

프로그래머스/프로그래머스_lv2(Python)

[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 짝지어 제거하기

mingchin 2021. 9. 18. 02:10
728x90
반응형

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

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

[문제 설명]

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.

예를 들어, 문자열 S = baabaa 라면

b aa baa → bb aa → aa 

의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.

 

[제한 조건]

  • 문자열의 길이 : 1,000,000이하의 자연수
  • 문자열은 모두 소문자로 이루어져 있습니다.

좀 더 세련되고 멋진 방법을 사용하고 싶었는데,,

# 대칭성 활용, 틀린 코드
def temp_(s):
    cnt = 0
    while True:
        cnt+=1
        if cnt > len(s):
            return 0 
        word = s[:cnt*2]
        if word[:len(word)//2] == ''.join((reversed(word[len(word)//2:]))):
            return s[cnt*2:]
        
def solution(s):
    cnt = 0
    while s:
        cnt+=1
        if cnt > len(s)/2:
            return 0 
        word = s[:cnt*2]
        if word[:len(word)//2] == ''.join((reversed(word[len(word)//2:]))):
            s = s[cnt*2:]
    return 1

앞에서부터 꺼내면서 대칭인 것들을 제거하려 하였는데 복잡하기만 하고 좋은 방법이 아니었다.

# 스택, 통과
def solution(s):
    answer = [s[0]]
    if len(s)%2:
        return 0
    for alpha in s[1:]:
        if answer:
            if answer[-1] == alpha:
                answer.pop()
        elif not answer:
            answer.append(alpha)
        else:
            answer.append(alpha)
    if answer:
        return 0
    elif not answer:
        return 1

결국 그냥 스택으로 통과했다. 카카오 인형뽑기 문제와 거의 유사한 방법인데, 왜 생각을 미리 못했을까ㅠ

관련된 내용은 아래

https://mingchin.tistory.com/34

 

[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 크레인 인형뽑기 게임

https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 20..

mingchin.tistory.com

 

728x90
반응형