공연장을 빌리는 평균 비용을 최소한으로 하는 문제이다.
이 문제를 풀 때 세번의 큰 과정을 거쳐서 정답을 얻게 되었는데, 처음과정은
이렇게 대여하는 날짜를 다르게 하여 평균 비용을 구하는 것이다. 이 방법이 제일 구현하기 간단하고 쉽게 생각할 수 있어서 해보았지만, 시간초과가 나왔다.
그래서 해본 것이 이렇게 시작하는 날짜를 정하고 대여하는 날짜를 늘려나가는 방식이다. 이건 전의 방법보다 빠르겠지만, 코드를 짰을때 여전히 시간초과가 났다.
그 원인이 뭘까 하고 생각해보니, 대여비용을 구할때 썻던 sum 함수가 의외로 시간을 많이 잡아먹는다는 글을 보았다. 그래서 sum의 사용을 최소한으로 하려 코드를 다시 짰고, 드디어 정답을 얻게 되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
#festival
import sys
for i in range(case):
minlist = [] # 평균비용들 저장
for t in range(n - l+1): # t=시작하는 날
initsum = sum(borlist[t:t+l]) # t부터 t+l-1날까지의 비용의 합(sum의 사용을 최소로 함)
for j in range(n-l-t):
initsum += borlist[t + l + j] # 다음 날의 비용을 더하고
localresult = initsum / (l + j+1) # 날이 늘어난 만큼 더해 나눈다
result = min(minlist) # 최소값을 찾는다
print("%.11f" % result) # 출력
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
sum을 매번 쓰지 않고, 시작날짜를 정할때만 쓰는 코드이다.
수행시간이 길긴한데, 문제에서 주는 제한이 20초라 6초도 통과 가능하다.
느낀점:
1. sum과 같은 함수가 시간을 많이 잡아먹기도 하는구나.. 시간 제한 때문에 신경써야 할 부분인거같다.
2. 정답률이 23%인데 나는 7번만에 성공했다. 1/7이면 확실히 23%보단 낮은데.. 분발해야겠다.
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 울타리 잘라내기 (fence) 문제 파이썬으로 풀기 (0) | 2019.10.14 |
---|---|
알고스팟 weekly calendar 문제 파이썬으로 풀기 (0) | 2019.10.09 |
알고스팟 weird numbers (weird) 문제 파이썬으로 풀기 (0) | 2019.09.22 |
알고스팟 Mismatched Brackets 문제 파이썬으로 풀기 (0) | 2019.09.12 |
알고스팟 yulo 문제 파이썬으로 풀기 (0) | 2019.09.06 |