정올/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를 츨력한다