[백준] 5355번 : 화성 수학

Jiya·2025년 3월 17일

정답

class MarsCalculate:
    """
    화성에서의 연산자를 나타내는 클래스
    """
    def __init__(self):
        pass
        
    def add(self, number):
        number += 5
        return number
        
    def subtract(self, number):
        number -= 7
        return number
        
    def multiple(self, number):
        number *= 3
        return number

    def calculate(self, expression):
        parts = expression.split()
        result = float(parts[0])
        
        for operator in parts[1:]:
            if operator == '@':
                result = self.multiple(result)
            elif operator == '%':
                result = self.add(result)
            else:
                result = self.subtract(result)
        return result
                
T = int(input())
calculator = MarsCalculate()
for t in range(T):
    expression = input()
    result = calculator.calculate(expression)
    print(f"{result:.2f}")

저는 클래스를 만들어 객체 생성을 통해 문제를 풀었지만,
이 방법은 메서드 호출 오버헤드가 많이 발생되므로 그냥 함수로만 푸는게 훨씬 더 효율적입니다.

아래는 AI가 가르쳐 준 코드입니다.

def mars_math(expression):
    parts = expression.split()
    result = float(parts[0])  # 첫 번째 값은 숫자
    
    # 연산자 적용
    for op in parts[1:]:
        if op == '@':
            result *= 3  # 3을 곱함
        elif op == '%':
            result += 5  # 5를 더함
        elif op == '#':
            result -= 7  # 7을 뺌
            
    return result

# 테스트 케이스 개수 입력
T = int(input())

# 각 테스트 케이스 처리
for _ in range(T):
    expression = input()
    result = mars_math(expression)
    print(f"{result:.2f}")  # 소수점 둘째 자리까지 출력

이 문제에 대한 가장 효율적인 해결책은 위와 같이 간단한 함수를 사용하는 방식입니다.
이 방법이 효율적인 이유는:

  1. 단순성: 필요한 최소한의 코드만 사용했습니다. 클래스 대신 함수를 사용하여 코드가 간결해졌습니다.
  2. 직접적인 연산: 각 연산자에 대해 직접 연산을 수행하므로 메서드 호출 오버헤드가 없습니다.
  3. 공간 효율성: 추가적인 객체나 데이터 구조를 생성하지 않으므로 메모리 사용이 최소화됩니다.
  4. 시간 효율성: O(n) 시간 복잡도를 가지며, 여기서 n은 입력 문자열의 연산자 수입니다.
profile
코딩 공부 노트

0개의 댓글