설명
번호 문자열에서 같은 번호로 붙어있는 쌍들을 소거하고 남은 번호를 비밀번호로 만든다.
풀이
재귀
- 번호 문자열을 리스트로 만든다.
- 리스트를 재귀로 돌게 한다.
- 리스트 길이만큼 반복문을 돌게 하는데, 여기서 이전과 같은 숫자이면 이전 숫자와 현재 숫자를 리스트에서 제거한다.
- 그리고 그 리스트를 재귀를 돌게 한다.
- 연속된 같은 수가 없을 때까지 반복 혹은 재귀를 돌게 하고 끝이 나면 리스트를 반환한다.
※ 결과값 맨 앞에 0이 있으면 안 되므로 제거해줘야 한다.
Solution
def calc(password):
for i in range(1, len(password)):
if password[i-1] == password[i]: #이전과 같은 숫자이면
password.pop(i) #현재 숫자 제거
password.pop(i-1) #이전 숫자 제거
return calc(password) #다시 재귀 돌리기
return password #재귀 모두 돌았으면 리스트 반환
for tc in range(1, 11):
n, password = map(int, input().split())
word = []
print('#'+str(tc), end=' ')
for i in str(password): #입력받은 문자 리스트로 만들기
word.append(i)
word = calc(word) #결과 저장
if word[0] == '0': #맨 앞이 0이면 제거
word.pop(0) #pop은 인덱스 삭제
for j in word:
print(j, end='')
print()
다른 풀이
for tc in range(1, 11):
n, password = input().split()
n = int(n)
stk = []
for c in password:
if stk and c == stk[-1]:
stk.pop()
else:
stk.append(c)
result = ''.join(stk)
print('#'+str(tc), result)
👩💻 회고
1, 2, 3차 제출에 실패했었는데, 풀이가 잘못된 줄 알았는데 결과값 맨 앞에 0이 있으면 안 된다는 걸 댓글에서 알게 됐다. 이 조건까지 설명에 있었다면 바로 풀었을 것 같다.. 아쉽다.
다른 풀이를 보니 엄청 간단하게 푼 사람도 있다.. 많이 배워야 할 것 같다.
'SWEA' 카테고리의 다른 글
[SWEA] 1217. [S/W 문제해결 기본] 4일차 - 거듭 제곱 (Python/D3) (0) | 2023.11.16 |
---|---|
[SWEA] 5948. 새샘이의 7-3-5 게임 (Python/D3) (0) | 2023.11.16 |
[SWEA] 2070. 큰 놈, 작은 놈, 같은 놈 (Python/D1) (2) | 2023.11.12 |
[SWEA] 2071. 평균값 구하기 (Python/D1) (1) | 2023.11.12 |
[SWEA] 1986. 지그재그 숫자 (Python/D2) (1) | 2023.11.11 |