[4코1파] 4명의 안드로이드 개발자와 1명의 파이썬 개발자의 코딩 테스트 서막 : 4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원

START :

[3코1파] 2023.01.04~ (23일차)
[4코1파] 2023.01.13~ (14일차)

Today :

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를 좋아함
예외처리를 해주는걸 좋아해서요

여담

할 말 없 어 밥 먹 을 껴

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글