반응형
4873. [파이썬 S/W 문제해결 기본] 4일차 - 반복문자 지우기
파이썬 SW문제해결 기본 - Stack1
2021.06.05 - [Algorithm] - SWEA 4869 종이붙이기 (python)
2021.06.05 - [Algorithm] - SWEA 4866 괄호검사 (python)
2021.06.05 - [Algorithm] - SWEA 4871 그래프 경로 (python)
2021.06.05 - [Algorithm] - SWEA 4873 반목문자 지우기 (python)
문제
문자열 s에서 반복된 문자를 지우려고 한다. 지워진 부분은 다시 앞뒤를 연결하는데, 만약 연결에 의해 또 반복문자가 생기면 이부분을 다시 지운다.
반복문자를 지운 후 남은 문자열의 길이를 출력 하시오. 남은 문자열이 없으면 0을 출력한다.
다음은 CAAABBA에서 반복문자를 지우는 경우의 예이다.
CAAABBA 연속 문자 AA를 지우고 C와 A를 잇는다.
CABBA 연속 문자 BB를 지우고 A와 A를 잇는다.
CAA 연속 문자 AA를 지운다.
C 1글자가 남았으므로 1을 리턴한다.
[입력]
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤ 50
다음 줄부터 테스트 케이스의 별로 길이가 1000이내인 문자열이 주어진다.
[출력]
#과 1번부터인 테스트케이스 번호, 빈칸에 이어 답을 출력한다.
코드
T = int(input())
for tc in range(1, T+1):
line = list(map(str, input()))
stack = []
# line을 검사
for i in range(len(line)):
# 만약 스택에 값이 없다면 스택에 추가
if not stack:
stack.append(line[i])
#이미 들어간 값이 있을때
else:
# 마지막으로 추가된 값이 현재 검사하는 값과 같다면
if stack[-1] == line[i]:
# 마지막 값을 pop해서 없애줌
stack.pop()
else:
# 그렇지 않다면 그냥 더해줌
stack.append(line[i])
# 결과는 스택 즉 중복되지 않은 값들을 받아온 것의 길이
result = len(stack)
print("#{} {}".format(tc, result))
반응형
'Algorithm' 카테고리의 다른 글
SWEA 4871 그래프 경로 (python) (0) | 2021.06.05 |
---|---|
SWEA 4866 괄호검사 (python) (0) | 2021.06.05 |
SWEA 4869 종이붙이기 (python) (0) | 2021.06.05 |
BOJ 6603 로또 (python) (0) | 2021.06.03 |
BOJ 18187 평면분할 (python) (0) | 2021.05.18 |