관리 메뉴

솜씨좋은장씨

[BaekJoon] 5355번 : 화성 수학 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 5355번 : 화성 수학 (Python)

솜씨좋은장씨 2021. 8. 30. 23:08
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 화성 수학입니다.

백준의 화성 수학을 파이썬으로 풀이하였습니다.

 

5355번: 화성 수학

겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산

www.acmicpc.net

👨🏻‍💻 문제 풀이

화성 수학이라고 해서 처음에는 공업수학 같은 수학의 하나의 종류인가..? 싶었는데

그냥 문제에서 정의한 방식대로 계산을 하는 수학을 화성 수학이라고 부르는 것이었습니다.

화성 수학의 계산 방법은 다음과 같습니다.

화성 수학의 수식 ( exp ) 은 

10.4 # % @

위처럼 식의 맨 앞에 숫자가 하나있고 공백을 사이에 두고 연산자 ( operator ) 가 이어서 나옵니다.

화성 수학의 연산자는 

@  -  3을 곱합니다.
%  -  5를 더합니다.
#   -  7을 뺍니다.

위와 같습니다.

 

먼저 화성 수학의 연산자 규칙에 따라 계산하는 함수를 하나 만들어주었습니다.

def hwasung_calc(operator, num):
    if operator == "@":
        num = num * 3
    elif operator == "%":
        num = num + 5
    elif operator == "#":
        num = num - 7
    
    return num

연산자와 숫자를 입력으로 받고 화성 수학의 규칙에 따라 if 와 elif를 활용해 구현하였습니다.

 

그 다음에는 화성 수학의 수식을 받으면 이를 계산해서 결과를 내는 함수를 만들었습니다.

exp_split = exp.split()

먼저 공백으로 숫자와 연산자가 이어져 있으므로 공백을 기준으로 split 하여 숫자, 연산자 리스트를 만들어줍니다.

num, operators = float(exp_split[0]), exp_split[1:]

여기서 화성 수학의 수식의 맨 앞의 값은 숫자, 나머지 뒤의 값은 연산자 이므로

숫자는 exp_split[0] 으로 연산자는 exp_split[1:] 로 나누어주고

숫자는 소수가 들어올 수도 있다고 하니 float 형식으로 변환해줍니다.

for operator in operators:
    num = hwasung_calc(operator=operator, num=num)

다음으로 화성 수학의 연산자 목록에서 연산자를 하나씩 꺼내오면서 맨앞의 숫자와 연산자

그리고 아까 만들어 둔 hwasung_calc 함수를 통해 화성 수학 계산을 진행합니다.

f"{num:.2f}"

정답은 소수점 둘째 자리까지 출력해야하므로 f-string에서 .2f 를 활용하여 소수점 둘째자리까지 출력이 가능하도록 합니다.

전체 코드는 아래를 참고해주세요!

👨🏻‍💻 코드 ( Solution )

def hwasung_calc(operator, num):
    if operator == "@":
        num = num * 3
    elif operator == "%":
        num = num + 5
    elif operator == "#":
        num = num - 7
    
    return num

def hwasung_math(exp):
    exp_split = exp.split()
    
    num, operators = float(exp_split[0]), exp_split[1:]
    
    for operator in operators:
        num = hwasung_calc(operator=operator, num=num)
        
    return f"{num:.2f}"


if __name__ == "__main__":
    for _ in range(int(input())):
        exp = input()
        print(hwasung_math(exp))
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments