기록하는삶
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 짝지어 제거하기 본문
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/12973
[문제 설명]
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 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
728x90
반응형
'프로그래머스 > 프로그래머스_lv2(Python)' 카테고리의 다른 글
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 거리두기 확인하기 (0) | 2021.09.20 |
---|---|
[코딩 테스트 연습(파이썬/Python)] 프로그래머스 _ 조이스틱 (0) | 2021.09.18 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 게임 맵 최단거리 (0) | 2021.09.17 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 튜플 (0) | 2021.09.15 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 수식 최대화 (0) | 2021.09.15 |