import sys
input = sys.stdin.readline
for _ in range(int(input())):
mainStack = [] # 메인 키입력 저장
subStack = [] # 커서 이동 처리 임시 스택
keyInput = input().rstrip() # 키입력
for key in keyInput:
if key == '<': # 오른쪽 커서 이동의 경우
if len(mainStack) > 0: # 메인에 값이 있다면
subStack.append(mainStack.pop()) # 서브스택으로 이동
elif key == '>': # 왼쪽 커서 이동의 경우
if len(subStack) > 0: # 서브스택으로 이동된 값이 있다면
mainStack.append(subStack.pop()) # 다시 메인으로 이동
elif key == '-': # 백스페이스 입력의 경우
if len(mainStack) > 0: # 메인의 값이 있다면
mainStack.pop() # 상단 값만 빼버림
else:
mainStack.append(key) # 그외 입력은 메인에 삽입
while len(subStack) > 0: # 입력 반복 이후 서브스택에 값이 남아 있는 경우
mainStack.append(subStack.pop()) # 메인으로 이동
for i in mainStack: # 메인 출력
print(i, end='')
print()
문제풀이
핵심 개념과 풀이 흐름을 짧고 선명하게 정리했습니다.
import sys
input = sys.stdin.readline
# 유클리드 호제법으로 최대 공약수 구하는 함수
def gcd(a, b):
big = max(a, b) # 큰 수
small = min(a, b) # 작은 수
if small == 0: # 작은 수가 0이면
return big # 큰 수 리턴
elif big % small == 0: # 큰 수가 작은 수로 나누어 떨어지면
return small # 작은 수 리턴
else:
return gcd(small, big%small) # 작은 수가 0이 될 때 까지 재귀하고 리턴값 리턴
a, b = map(int, input().split())
oneNum = gcd(a, b) # 입력 받은 수의 최대 공약수가 1의 갯수로 바꿨을 때 최대공약수의 1의 갯수임.
print("1"*oneNum)