본문 바로가기

알고리즘 문제풀이

Swea D2_11878.forth

T = int(input())
for tc in range(1,T+1):
    fx = list(map(str,input().split()))
    stack = [0] * len(fx)
    top = -1
    for i in fx:
        if i.isdigit():
            top += 1
            stack[top] = int(i)
        else:
            if i == '.':
                if top == 0:  # 스택에 결과값만 남았을 때
                    print(f'#{tc} {stack[top]}')
                else:
                    print(f'#{tc} error')
                break
            elif top < 1:
                print(f'#{tc} error')
                break
            b = stack[top]
            top -= 1
            a = stack[top]
            if i == '+':
                stack[top] = a + b
            elif i == '-':
                stack[top] = a - b
            elif i == '*':
                stack[top] = a * b
            elif i == '/':
                stack[top] = a // b
            else:
                print(f'#{tc} error')  # 알 수 없는 연산자
                break

실수 한 부분

1. 가장 마지막 트라이 : 틀린부분을 잘 모르겠음... 혹시 아시면 댓글바람...

T = int(input())
for tc in range(1,T+1):
    fx = list(map(str,input().split()))
    stack = [0] * len(fx)
    top = -1
    for i in fx:
        if i.isdigit():
            top += 1
            stack[top] = i
        else:
            if i == '.':
                top -= 1
                break
            b = int(stack[top])
            a = int(stack[top-1])
            if i == '+':
                top -= 1
                stack[top] = a + b
            elif i == '-':
                top -= 1
                stack[top] = a - b
            elif i == '*':
                top -= 1
                stack[top] = a * b
            elif i == '//':                     # '/' 로 바꿔야했음
                top -= 1
                stack[top] = a // b
            else:
                break
    # print(f'#{tc} {top}{stack}')
    if top == -1 and stack:
        print(f'#{tc} {stack[top+1]}')
    else:
        print(f'#{tc} error')

1. 가장 처음 트라이 :  try-except 사용해서 테스크 케이스 중 5개만 맞춤

T = int(input())
for tc in range(1,T+1):
    fx = list(map(str,input().split()))
    prior = ['*','//','-','+','.']
    stack = []
    try:
        for i in fx:
            if i not in prior:
                stack.append(int(i))
            elif i =='.':
                break
            else:
                b = stack.pop()
                a = stack.pop()
                if i == '+':
                    stack.append(a + b)
                if i == '-':
                    stack.append(a - b)
                if i == '*':
                    stack.append(a * b)
                if i == '//':
                    stack.append(a // b)
        print(f'#{tc} {stack.pop()}')
 
    except:
        print(f'#{tc} error')

2. 두 번째 트라이 : 수식을 적용할 때 top에 대한 설정 문제

T = int(input())
for tc in range(1,T+1):
    fx = list(map(str,input().split()))
    prior = ['*','//','-','+','.']
    stack = [0] * len(fx)
    top = 0
    for i in range(len(fx)):
        if fx[i] not in prior:
            stack[top] = int(fx[i])
            top += 1
        elif fx[i] =='.':
            top -= 1
            break
        else:
            b = stack[top-1]
            a = stack[top-2]
            top -= 2 			# top -=1 한 후 a 값에 수식 값이 들어갔어야 했음
            if fx[i] == '+':
                stack[top] = a + b
                top += 1
            if fx[i] == '-':
                stack[top] = a - b
                top += 1
            if fx[i] == '*':
                stack[top] = a * b
                top += 1
            if fx[i] == '//': 			# '/'로 하는걸 실수
                stack[top] = a // b
                top += 1
    # print(f'#{tc} {top}{stack}')
    if top == 0 and stack:
        print(f'#{tc} {stack[top]}')
    else:
        print(f'#{tc} error')