ALGORITHM/PYTHON

백준 BAEKJOON 32767번 계산기가 필요해 [PYTHON/파이썬]

칼코 2024. 12. 4. 23:06
반응형

 

 

 

 

 

 

백준 BAEKJOON 32767번 계산기가 필요해 [PYTHON/파이썬]


<문제 출처> (BRONZE Ⅱ)

https://www.acmicpc.net/problem/32767

 

 

 

 

 

 

 

<풀이>

먼저 주어지는 입력을 공백을 기준으로 나눈 뒤 리스트 형태로 만들었다.

(0, 2, 4번째 인덱스에는 세 개의 수 / 1, 3번째 인덱스에는 연산자)

그리고 0, 2, 4번째 인덱스가 정수인지 소수인지 판별하기 위해 함수를 만들었다.

단순하게 해당 문자열에 점(.)이 포함되어 있으면 float로 return, 그렇지 않다면 int로 return 했다.

1번째 인덱스부터 시작하여 증감 치는 2로 설정한 for문을 통해 주어진 수에 대한 계산을 진행했다.

계산한 결과를 소수점 아래 넷째 자리에서 반올림하기 위해 {:.3f}".format을 사용 후 str 값으로 형변환 했다.

여기서 중요한 점이 round 통해 반올림할 수도 있겠지만

round 함수는 이진 부동소수점 연산을 사용한다. 이 때문에 예상치 못한 결과가 나올 수 있다.

마지막으로 문제의 예제 출력처럼 형식을 맞춰서 계산기 모양으로 나오게 출력하면 된다.

 

 

 

 

 

 

 

<코드>

# 정수, 소수 판별 함수
def numChange(x):
    if "." in x:
        return float(x)
    else:
        return int(x)


calculation = input().split()
result = numChange(calculation[0])

# 계산기 작동
for i in range(1, len(calculation), 2):
    operator = calculation[i]
    operand = numChange(calculation[i + 1])

    if operator == "+":
        result += operand
    elif operator == "-":
        result -= operand
    elif operator == "*":
        result *= operand
    elif operator == "/":
        result /= operand


# 결과 소수점 셋째 자리까지 반올림
result_str = "{:.3f}".format(result)


# 계산기 출력
print("=================")
print("|SASA CALCULATOR|")
print("|" + " " * (15 - len(result_str)) + result_str + "|")
print("-----------------")
print("|               |")
print("| AC         /  |")
print("| 7  8  9    *  |")
print("| 4  5  6    -  |")
print("| 1  2  3    +  |")
print("|    0  .    =  |")
print("=================")

 

 

 

 

 

 

 

 

 

반응형