정올/KOI기출 문제
정올 꿀따기
juwanseo
2025. 5. 15. 17:28
N = int(input())
ho = [0] + list(map(int, input().split()))
hs = []
t = 0
for honey in ho:
t += honey
hs.append(t)
def eat(i, j, k):
si = hs[j-1] - hs[i-1]
si2 = hs[k-1] - hs[i-1] - ho[j]
rst1 = si + si2
sj = hs[j] - hs[i]
sj2 = hs[k-1] - hs[j-1]
rst2 = sj + sj2
sk = hs[k] - hs[i] - ho[j]
sk2 = hs[k] - hs[j]
rst3 = sk + sk2
return max(rst1, rst2, rst3)
rst = 0
for j in range(2, N):
temp = eat(1, j, N)
rst = max(rst, temp)
print(rst)
N을 입력받고 ho를 [0]으로 시작값을 둔 후 list로 입력받고 hs를 한번 더 입력 받는다. for문을 ho만큼 돌려서 t를 ho만큼 더해간 후 hs를 append해서 값을 지정한다. 함수를 만들어서 si와 sj2 리스트를 만들고 hs[j]와 hs[k]를 1씩 빼고 더한다. 또한 rst1이라는 함수를 만들고 si와 si2를 각각 더해나가도록 만든다. sj를 hs[j]와 hs[i]를 뺀 것이라고 지정해둔다. sj2또한 각각 1씩 뺀걸로 저장해둔다.
rst2 함수도 만들고 sj에다가 sj2를 더한 값을 저장한다. sk함수를 만들고 hs[k]에서 hs[i]를 빼고 ho[j]도 뺀다. sk2도 만들고 hs[k] 와 hs[j]를 뺀다.rst3또한 sk와 sk2를 더한 값을 저장한다. 다 값을 저장했다면 return을 해서 rst1, rst2, rst3의 max 값을 return한다. rst의 값을 0으로 정하고 for문을 돌려서 rst의 값을 재조정한다. 그 후 rst를 츨력한다