[SWEA] 4873 반복문자 지우기

Yujin Jo·2022년 3월 29일
0

SWEA

목록 보기
18/22
post-thumbnail

문제 출처 : [SWEA] 4873 반복문자 지우기
learn -> course -> programming intermediate -> stack1 -> 반복문자 지우기

문제

문자열 s에서 반복된 문자를 지우려고 한다. 지워진 부분은 다시 앞뒤를 연결하는데, 만약 연결에 의해 또 반복문자가 생기면 이부분을 다시 지운다.

반복문자를 지운 후 남은 문자열의 길이를 출력 하시오. 남은 문자열이 없으면 0을 출력한다.

다음은 CAAABBA에서 반복문자를 지우는 경우의 예이다.

CAAABBA 연속 문자 AA를 지우고 C와 A를 잇는다.

CABBA 연속 문자 BB를 지우고 A와 A를 잇는다.

CAA 연속 문자 AA를 지운다.

C 1글자가 남았으므로 1을 리턴한다.

입력

첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤ 50

다음 줄부터 테스트 케이스의 별로 길이가 1000이내인 문자열이 주어진다.

출력

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

코드

T = int(input())
for tc in range(1, T + 1):
    word = input()      # 주어진 문자열을 받아옴
    stack = []      # 문자열을 검사할 스택 생성

    # 문자열을 돌면서 중복 검사
    for i in word:
        # stack이 비어 있으면 append
        if len(stack) == 0:
            stack.append(i)
        # 현재 알파벳과 stack의 마지막 값이 같으면 pop
        elif i == stack[-1]:
            stack.pop()
        else:
            stack.append(i)     # 긔 외에는 append

    print(f'#{tc} {len(stack)}')

풀이 방법

stack을 활용한 문제로 현재 알파벳과 stack의 마지막 알파벳과 비교하면서 동일한 알파벳일 경우 제거해주었다. 처음엔 if문에 pop()한 값과 현재 알파벳이 같은지 비교를 했더니 조건을 검사할 때마다 값이 pop 되었다. 그래서 stack[-1]과 비교하는 방법으로 바꿔 써주었다.

profile
일단 해보자

0개의 댓글