728x90
https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
문자열 s에서 반복된 문자를 지우려고 한다. 지워진 부분은 다시 앞뒤를 연결하는데, 만약 연결에 의해 또 반복 문자가 생
기면 이부분을 다시 지운다.
반복 문자를 지운 후 남은 문자열의 길이를 출력하시오. 남은 문자열이 없으면 0을 출력한다.
다음은 CAAABBA에서 반복문자를 지우는 경우의 예이다.
CAAABBA 연속 문자 AA를 지우고 C와 A를 잇는다.
CABBA 연속 문자 BB를 지우고 A와 A를 잇는다.
CAA 연속 문자 AA를 지운다.
C 1글자가 남았으므로 1을 리턴한다.
< ❓ 생각 >
< 💻 코드 >
1. 뒤에서부터 확인
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# 테스트 케이스
arr = list(map(str,input()))
# 뒤에서 부터 확인
# i : 리스트이 마지막 인덱스
i = len(arr)-1
while i and len(arr) > 1:
# 인덱스에러 나지 않도록
if 0 < i < len(arr):
# 같으면 삭제
# arr[i-1]을 삭제하면 i-1뒤의 인덱스들이 1개씩 작아짐
if arr[i-1] == arr[i]:
arr.pop(i-1)
arr.pop(i-1)
# 다음 비교
i -= 1
result = len(arr)
print(f'#{tc} {result}')
2. 앞에서부터 확인 (Stack)
# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
# 테스트 케이스
arr = input()
stack = []
# data 하나씩 읽으면서 push
# 만약에 top에 있는 요소가 나랑 같으면,pop 아니면 push
for i in arr:
# 비어있으면 무조건 넣기
if not stack:
stack.append(i)
else:
# top이 나랑 같은가
if i == stack[-1]:
stack.pop()
else:
stack.append(i)
print(f'#{tc} {len(stack)}')
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 1223. 계산기2 - Python (0) | 2022.02.23 |
---|---|
[SWEA] 2005. 파스칼의 삼각형 - Python (0) | 2022.02.22 |
[SWEA] 4866. 괄호검사 - Python (0) | 2022.02.22 |
[SWEA] 4869. 종이 붙이기 - Python (0) | 2022.02.22 |
[SWEA] 1961. 숫자 배열 회전 - Python (0) | 2022.02.21 |
댓글