1234. 비밀번호 (SWEA)
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
출처:
나의 풀이 (Stack 이용 x)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
T = 10
for test_case in range(1, T + 1):
N,N_list=input().split()
N_list=list(N_list)
i=0
while i<len(N_list)-1:
if N_list[i]==N_list[i+1]:
N_list=N_list[:i]+N_list[i+2:]
i-=1
i=max(0,i)
else:
i+=1
ans=''.join(N_list)
print(f'#{test_case} {ans}')
- stack을 이용하지 않고, 문자열 상에서 같은 문자가 나오면 slicing을 이용하여 문자를 삭제해주었다.
- 이 때 i가 0보다 작아지는 등 제약이 있어서 조건이 꽤 필요하다.
- stack을 이용하면 더 간단하게 풀 수 있었다. 풀이는 아래와 같다.
나의 풀이 (Stack이용)
1
2
3
4
5
6
7
8
9
10
11
T = 10
for test_case in range(1, T + 1):
N,N_list=input().split()
stack=[]
for n in N_list:
if stack and stack[-1]==n:
stack.pop()
else:
stack.append(n)
ans=''.join(stack)
print(f'#{test_case} {ans}')
- stack에 값을 넣을 때, 가장 위의 수와 같은 숫자이면 pop()을 하여 최종 정답을 만들어주었다.
This post is licensed under CC BY 4.0 by the author.