0~9로 이루어진 번호 문자열에서 같은 번호로 붙어있는 쌍들을 소거하고 남은 번호를 출력한다. 단, 번호쌍이 소거되고 소거된 번호 쌍의 좌우 번호가 같은 번호이면 또 소거 할 수 있다.
예를 들어 아래의 번호 열을 언급한 방법으로 소거하고 알아낸 과정을 보도록 한다.
❣ 나의 풀이
# 스택을 이용한 풀이
stack=[0]*10
str=input().split() # 공백 제거
stack[0]=str[0]
top=1
i=0
for i in range(1, 10):
if top != 0 and stack[top-1] == str[i]: # 짝을 찾으면
stack[top-1]=0 # 값 없애기(pop)
top-=1
else: # 짝이 안 맞을 경우
stack[top]=str[i] # stack에 문자를 삽입(push)
top+=1
print(stack)
풀이에 나와있는 C언어 코드를 파이썬으로 그대로 구현했을 때 기대한 값이 나오지 않았다.
입력이 1 2 3 8 0 9 9 0 8 4일 때 기대값은 ['1', '2', '3', '4', 0, 0, 0, 0, 0, 0]인데 ['1', '2', '3', '4', '0', '9', 0, 0, 0, 0]가 나옴.
stack[top-1]=0 코드를 추가해줌. 짝이 되는 숫자를 초기화하기 위해서.
문제 출처 SW expert academy
반응형
'coding test' 카테고리의 다른 글
[파이썬] 1226. 미로1 (0) | 2021.03.12 |
---|---|
[파이썬] 괄호 짝 판별 (0) | 2021.03.09 |
[C] 패턴 매칭 해결하기 (0) | 2021.03.04 |
[C] Ladder (0) | 2021.02.25 |
[C, Python] 2차원 배열 정렬 (0) | 2021.02.25 |