하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
[3코1파] 2023.01.04~ (23일차)
[4코1파] 2023.01.13~ (14일차)
2023.01.26 [23일차]
프로그래머스 LV2.
짝지어 제거하기
2017 팁스타운
https://school.programmers.co.kr/learn/courses/30/lessons/12973
문제 요약
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
제한 사항
문자열의 길이 : 1,000,000이하의 자연수
문자열은 모두 소문자로 이루어져 있습니다.
입출력 예
문제 풀이 방법
처음에는 1. while문을 돌면서 cnt를 +1씩 하고 string을 돌아서,
같으면 인덱싱을 이용해서 합쳐서 string을 다시 만들고 이러한 일련의 과정을
거치는 로직으로 짰음
그랬더니 테스트케이스 답은 맞지만 효율성에서 박살이 나버렸음
효율성 시간초과가 났단말임 !!!!!!!!!!!!!!!!!!!!!!!!
그래서 다시 시도 함
먼저, cnt 기준으로 인덱스가 처음부터 시작하지 않으면
제거된 상태이전과 그 후 인덱스를 합치는 (?) 그러니까
현재 시점에서 같아버리면 이전의 것은 고려하지 않고 새로운 string을 붙이는 과정으로 했더니.. 테스트 케이스 몇개 박살 남
곰곰히 생각해보니까.. 기존에 풀었던 유사한 문제가 생각났던 것이다
그렇다 이것은 스택으로 풀어야 한다...
그롸치
내 코드
def solution(s):
stack = []
for string in list(s):
try:
if string==stack[-1]:
stack.pop()
else:
stack.append(string)
except:
stack.append(string)
return 1 if len(stack)==0 else 0
증빙
다른 사람 풀이
제일 좋아요 많이 받은 새럼도 stack 자료 구조를 이용했지만
내가 한 try, except 문을 if else로 끝냈다
개인적인 취향으로 if else 보다 try except를 좋아함
예외처리를 해주는걸 좋아해서요
여담
할 말 없 어 밥 먹 을 껴