본문 바로가기

Develop/코딩인터뷰

[코딩인터뷰] 백준 14888번

반응형

백준 14888번
백준 14888번

Python3 는 시간초과 가 발생합니다. itertools.permutations 함수가 시간이 오래 걸리기 때문입니다. PyPy3 로 변경하면 통과됩니다.

저는 개인적으로 알고리즘 효율성에 큰 의미를 두지는 않습니다. 효율성이 중요하지 않다는건 아닌데, 실무를 하다보니 주어진 개발 기간을 코드의 효율을 개선하는데 투자하기 보다는 전체 설계를 개선할 수 있는 코드 또는 가독성이 좋아지는 코드를 짜는데 시간을 투자하는게 생산성이 더 높다고 생각합니다. 기간 내에 정확하게 개발해서 출시한 뒤에 효율이 크게 뒤떨어지는 부분부터 제품을 개선해 나가는 재미도 있으니까요. 당연히 효율 높은 코드를 바로바로 구현할 수 있도록 훈련을 지속적으로 하면 생산성과 효율 모두 달성할 수 있으니, 코딩 테스트로 연습할 때는 당연히 효율성을 고려해야 합니다. 다만 언어 특성으로 인해 시간초과가 발생하는 부분은 넘어가도 되지 않을까요? ㅠ.ㅠ

import itertools

n = int(input())
numbers = list(map(int, input().split()))
operators_numbers = list(map(int, input().split()))

operators = []
# 0 = 덧셈 / 1 = 뺄셈 / 2 = 곱셉 / 3 = 나눗셈
for i in range(4):
    for _ in range(operators_numbers[i]):
        operators.append(i)

min_value = 10 ** 10
max_value = -min_value
for ordered_operators in itertools.permutations(operators, len(operators)):
    total = numbers[0]
    for i in range(len(ordered_operators)):

        if ordered_operators[i] == 0:
            total += numbers[i+1]
        elif ordered_operators[i] == 1:
            total -= numbers[i+1]
        elif ordered_operators[i] == 2:
            total = int(total * numbers[i+1])
        elif ordered_operators[i] == 3:
            total = int(total / numbers[i+1])

    if total > max_value:
        max_value = total

    if total < min_value:
        min_value = total

print(max_value)
print(min_value)
반응형