0~9로 이루어진 번호 문자열에서 더 이상 소거할 게 없을 때까지
같은 번호로 붙어있는 쌍들을 모두 제거하면 나오는 비밀번호는?

[코드]
T = 10
for test_case in range(1, T+1):
N, password = input().split()
find = True
i = 0
while(find): # 소거할 번호쌍이 없으면 종료
i = 0 # i 값 초기화
find = False # 중복을 찾지 못하면 루프 종료, 찾으면 True로 바꿈
while i < len(password) - 1: # 소거할 변호쌍 탐색
if(password[i]== password[i+1]):
password = password[:i] + password[i+2:] # i와 i+1을 제외한 부분으로 새로운 문자열 생성
find = True
else:
i += 1
print("#%d %s" %(test_case, password))
[문제풀이]
더 이상 소거할 번호쌍이 없을때까지 계속해서 붙어있는 번호쌍을 제거시킨다.

이렇게 외부 while문과 내부 while 문을 돌려 내부 while문은 리스트를 탐색해 중복을 제거한다.
그리고 외부에선 내부 while문에서 중복이 더 이상 발견하지 못할때까지 계속 탐색한다.
while i < len(password) - 1: # 소거할 변호쌍 탐색
이때 왜 for문이 아니라 while문을 사용했냐면, 내부에서 반복하는 password 리스트를 삭제시켜 개수를 변경하기 때문에 그대로 for문을 돌리다가는 list out of index 오류가 발생할 수 있기 때문!
else:
i += 1
그래서 중복쌍 발견시 소거, 그리고 i를 중복을 발견하지 못할시에만 증가시키는 것으로 소거시 그 위치부터 탐색하도록 했다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (0) | 2024.10.22 |
|---|---|
| [Python, 파이썬] SWEA 1873. 상호의 배틀필드 (0) | 2024.10.20 |
| [Python, 파이썬] SWEA 3752. 가능한 시험 점수 (2) | 2024.10.17 |
| [Python, 파이썬] SWEA 1213. [S/W 문제해결 기본] 3일차 - String (3) | 2024.10.17 |
| [Python, 파이썬] SWEA 1249. [S/W 문제해결 응용] 4일차 - 보급로 (2) | 2024.10.16 |