Post
1234. 비밀번호 (SWEA) | Gihun Son

1234. 비밀번호 (SWEA)

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

출처:

SW Expert Academy

나의 풀이 (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.