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

[CodeUp][Python] 1231번 : 계산기 1

by 빛밤하늘 2021. 8. 31.
반응형

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

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

 

계산기 1

영민이는 프로그램을 이용하여 계산기를 만들려고한다. 하지만 영민이는 프로그램을 얼마 배우지 않아 어려워하고있다. 우리가 영민이를 위해 계산기 프로그램을 만들어주자.

codeup.kr

 

 

 

주의해야 할 점

1. readline을 사용하는 입력 방식

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

그래서 map처럼 따로 처리를 해주지 않는 경우에는 rstrip을 사용해 맨 끝의 \n을 떼줘야 합니다.

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

 

예제 설명

1. 첫 번째 예제

- 입력

10+10

 

- 출력

20

 

- 설명

입력한 연산식은 10+10입니다.

더하기 연산이므로 10 + 10을 계산한 결과인 20을 출력합니다.

 

생각한 풀이 과정

먼저 연산식에 들어가는 연산자들의 종류 더하기, 빼기, 곱하기, 나누기인

'+', '-', '*', '/'를 리스트 operators에 넣어줍니다.

 

연산식 한 줄을 입력합니다.

연산자들 리스트인 operators에서 한 연산자씩 반복해봅니다.

현재 연산자가 입력한 연산식에 들어있다면, 현재 연산자를 따로 변수에 저장해주고,

현재 연산자를 기준으로 연산식을 분리하여 피연산자인 두 숫자를 각각 int형으로 변환하고 변수에 저장합니다.

 

연산식에 들어있던 연산자가 '+'라면, 따로 저장한 두 숫자의 덧셈 결과를 출력합니다.

연산식에 들어있던 연산자가 '-'라면, 따로 저장한 두 숫자의 뺄셈 결과를 출력합니다.

연산식에 들어있던 연산자가 '*'라면, 따로 저장한 두 숫자의 곱셈 결과를 출력합니다.

그 외의 경우인 연산식에 들어있던 연산자가 '/'라면,

따로 저장한 두 숫자의 나눗셈 결과를 소수 둘째 자리까지 출력합니다.

 

 

제출한 파이썬 코드

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


# 더하기, 빼기, 곱하기, 나누기 연산자들 +, -, *, /가 들어있는 리스트 변수를 선언합니다.
operators = ['+', '-', '*', '/']
# 연산식 한 줄을 입력합니다.
# 맨 끝의 \n은 떼어줍니다.
operation_expression = stdin.readline().rstrip()
# 정수 2개와 연산자를 연산식에서 분리해 저장할 변수들 선언합니다.
# 각각 None으로 초기화합니다.
num1, num2, operator = None, None, None

# operators에서 연산자 하나씩 반복해봅니다.
for oper in operators:
    # 현재 연산자가 입력한 연산식에 들어있다면
    if oper in operation_expression:
        # operator에 현재 연산자를 저장합니다.
        operator = oper
        # 입력한 연산식에서 현재 연산자를 기준으로 분리해 각 피연산자들을 
        # 각각 int형으로 변환하고 변수에 저장합니다.
        num1, num2 = map(int, operation_expression.split(operator))

# 연산식의 연산자가 +라면
if operator == '+':
    # 두 피연산자들의 덧셈 결과를 출력합니다.
    print(num1 + num2)
# 연산식의 연산자가 +라면
elif operator == '-':
    # 두 피연산자들의 뺄셈 결과를 출력합니다.
    print(num1 - num2)
# 연산식의 연산자가 +라면
elif operator == '*':
    # 두 피연산자들의 곱셈 결과를 출력합니다.
    print(num1 * num2)
# 그 외의 경우인 연산식의 연산자가 /라면
else:
    # 두 피연산자들의 나눗셈 결과를 출력합니다.
    # 나눗셈 결과는 소수 둘째 자리까지 출력합니다.
    print('%.2f' % (num1 / num2))

 

제출 결과

CodeUp 1231번 : 계산기 1에서 코드 제출 결과
CodeUp 1231번 : 계산기 1에서 코드 제출 결과

 

느낀 점

파이썬에서도 eval이 있어서 eval을 사용하면 쉽게 풀 수 있습니다.

그런데 예전에 자바스크립트를 배울 때 eval 함수는 정말 어쩔 수 없이 사용해야 하는 경우가 아니라면

웬만하면 절대로 사용하면 안 된다는 글을 읽은 적이 있습니다.

그 글에 eval 함수의 나쁜 점도 상세하게 적혀 있었는데 다시 한번 찾아봐야겠습니다.

그리고 파이썬에서도 eval 함수 사용을 지양하는지에 대해서도 찾아봐야겠습니다.

eval 함수에 대한 글을 상기하며 이번 문제를 풀 때는 일부러 eval 함수를 사용하지 않고 풀었습니다.

 

만약 이 포스팅을 읽으신 분들 중 eval을 이용하여 푸신 분들이 계신다면

eval을 사용하지 않고도 한 번 풀어보세요.🙌🙌

 

 

 

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

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

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

반응형

댓글