본문 바로가기
알고리즘/CodeUp PS

[CodeUp][Python] 1285번 : 계산기 2

by 빛밤하늘 2021. 9. 23.
반응형

밑의 링크는 CodeUp에서의 문제 링크입니다.

문제는 링크를 통해서 직접 봐주시길 바랍니다.

 

계산기 2

왼쪽부터 차례대로 연산한 결과를 출력한다.(우선순위x)

codeup.kr

 

 

 

주의해야 할 점

1. readline만 사용해서 입력할 때

readline을 사용해서 입력할 때는 맨 끝에 \n이 붙어서 입력됩니다.

입력값을 int나 float 같이 숫자형 처리를 하지 않고, 문자열 형태 그대로 쓴다면

대부분의 문제에서는 맨 끝의 \n을 떼어주기 위해 rstrip을 사용해야 합니다.

string = sys.stdin.readline().rstrip()

 

2. 우선순위

이 문제에서는 연산자 우선순위는 생각할 필요 없이 그냥 왼쪽에서 오른쪽으로

차례대로 계산하는 코드로 작성하면 됩니다.

 

3. 나눗셈

모든 계산은 정수형 계산으로 처리한다라는 경고 문구가 있는데, 

덧셈, 뺄셈, 곱셈은 연산자 그대로 사용하면 되지만,

나눗셈을 하는 연산자인 '/'을 사용하면 연산 결과가 실수로 나오게 됩니다.

 

 

예제 설명

1. 첫 번째 예제

- 입력

3+3-3*3/3=

 

- 출력

3

 

- 설명

정수는 int 범위, 괄호 없는 사칙연산을 넣어 입력한 식은 3+3-3*3/3=입니다.

우선순위 없이 왼쪽부터 차례대로 연산하면 3 + 3 = 6, 6 - 3 = 3, 3 * 3 = 9, 9 / 3 = 3이므로

3을 출력합니다.

 

 

제출한 파이썬 코드

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 첫째 줄에 정수와 사칙연산 기호가 식을 입력합니다.
# 맨 끝의 \n은 떼어줍니다.
expression = stdin.readline().rstrip()
# 정수를 저장할 변수를 선언합니다.
operand = ''
# 사칙연산 기호와 '=' 기호가 있는 리스트 변수를 선언합니다.
operations = ['+', '-', '*', '/', '=']
# 사칙연산 기호를 저장할 변수를 선언합니다.
# None으로 초기화합니다.
operation = None
# 연산한 결과를 저장할 변수를 선언합니다.
# 0으로 초기화합니다.
result = 0

# 식을 한 글자씩 반복해봅니다.
for char in expression:
    # 현재 글자가 사칙연산 기호 혹은 '='이라면
    if char in operations:
        # operand에 저장되어 있는 숫자 형태의 문자열을 int형으로 변환해서 저장합니다.
        operand = int(operand)

        # operation에 어떠한 사칙연산 기호도 저장되어 있지 않다면
        # 한 글자씩 반복하면서 처음 만난 사칙연산 기호라면
        if operation is None:
            # 이전까지 아무 것도 연산할 것이 없었으므로 result에 operand의 값을 그대로 저장합니다.
            result = operand
        # operation에 '+'가 저장되어 있다면
        elif operation == '+':
            # result의 값에 operand의 값을 더해줍니다.
            result += operand
        # operation에 '-'가 저장되어 있다면
        elif operation == '-':
            # result의 값에 operand의 값을 빼줍니다.
            result -= operand
        # operation에 '*'가 저장되어 있다면
        elif operation == '*':
            # result의 값에 operand의 값을 곱해줍니다.
            result *= operand
        # operation에 '/'가 저장되어 있다면
        elif operation == '/':
            # result의 값에 operand의 값을 나눈 몫을 저장합니다.
            result //= operand

        # operand에는 다시 빈 문자열을 저장합니다.
        operand = ''
        # operation에 연산자인 현재 문자를 저장합니다.
        operation = char
    # 하나의 피연산자를 변수에 저장하기 위한 부분입니다.
    # 그 외의 경우인 현재 문자가 숫자 형태의 문자라면
    else:
        # operand에 현재 문자인 숫자 형태의 문자를 넣어줍니다.
        operand += char

# 맨 끝의 '='까지 반복문을 모두 돌고 나면
# 식을 연산한 결과인 result의 값을 출력합니다.
print(result)

 

 

제출 결과

CodeUp 1285번 : 계산기 2에서 코드 제출 결과
CodeUp 1285번 : 계산기 2에서 코드 제출 결과

 

 

느낀 점

이번 문제를 처음 읽었을 때는 다른 문제처럼 쉽게 풀겠거니 하고 만만하게 봤었습니다.

그런데 정작 부딪혀보니 짠 코드에 오류가 뜨거나 계속 답이 나오지 않았고,

통과하는 코드를 완성시켰지만 그리 길지도 않은 코드에 어려웠다고 느껴서 자괴감이 조금 드네요. 😞😞

 

그리고 저는 문제를 풀고 나서 다른 사람이 읽었을 때 못 푼 사람이 있다면

도움이 되도록 자세하게 써보려고 하는데

글 솜씨가 영 없어서 제가 생각한 것을 글로 옮기는 게 갈수록 너무 어렵네요.

글로만 전달하는 것에 한계를 느끼고 있습니다...

그림과 영상을 배워야 할까요...

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

※ 공감 버튼과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍

반응형

댓글