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


문제

 

각 테스트 케이스에 따라 규칙적으로 증가하는 땅값을 확인하고, 구매할 수 있다면 구매하는데 필요한 비용을, 구매할 수 없다면 "Too expensive"를 출력하는 문제이다.

 


풀이

 

파이썬은 데이터의 크기에 따라 메모리를 동적으로 할당하기 때문에 큰 수를 다루기 용이하다. 따라서 문제 그대로 모든 땅값을 구하고, 상근이 가진 돈과 비교해서 너무 비싸면 "Too expensive"를 출력하면 된다. 만약 C++, Java 와 같이 데이터 타입에 따라 범위가 정해져 있는 언어를 사용한다면 땅값을 더해주면서 상근이 가진 돈과 비교하면 되겠다.

땅값을 구하는 공식은 $ 2 \times (L_i)^t $ 인데, 해가 지날수록 기하습수적으로 증가한다. 따라서 첫 해에 가장 비싼 땅을 사야하고, 마지막 해에 가장 저렴한 땅을 사야 구매 비용을 최소화할 수 있다.

각 테스트 케이스에 따라 땅값을 입력받고, 정렬한 후, 땅값의 합을 구한다. 그 후 상근이 가진 돈과 비교하여 알맞게 출력하면 된다.

 


코드

 

import sys

sanggeun_money = 5000000
test = int(sys.stdin.readline())
for _ in range(test):
    pay = 0
    time = 1
    lands = []
    while True:
        temp = int(sys.stdin.readline())
        if temp == 0:
            break
        else:
            lands.append(temp)
    lands = sorted(lands, reverse=True)
    for land in lands:
        pay += 2 * land ** time
        time += 1
    if pay > sanggeun_money:
        print('Too expensive')
    else:
        print(pay)

 

애스터로이드