백준 23322번
https://www.acmicpc.net/problem/23322
문제
후기
i보다 K만큼 뒤에 있는 초콜릿을 먹기 때문에 무조건 초콜릿은 앞에서 부터 먹는 다는 것을
우선 순위로 하여 문제에 접근하게 됐다. list를 돌면서 li[i+K]와 li[i]가 다르면 초콜릿을
먹게되고 정렬한다음 다시 list를 돈다. answer이라는 list 를 복사해서 저장해두고,
for문을 돌았는데도 초콜릿을 먹지 않았다면
더이상 먹을 초콜릿이 없다는 얘기이므로 답을 출력하면 된다.
나의 풀이
import sys
input = sys.stdin.readline
import copy
N, K = map(int,input().split())
li = list(map(int,input().split()))
# 1 K<i인 i를 골라 , i-K 번째 통에 있는 초콜릿의 개수가 똑같아질때까지 i번째 통에서 초콜릿을 꺼내먹는다
# 2 통을 재정렬 , 즉 초콜릿의 개수가 오름차순이 되도록 통을 재배치
# 최대한 많이, 최대한 빨리 먹어라. 몇개나 먹을 수 있나
result = 0 #몇개를 먹는가
day = 0 #며칠이 지났나
while True:
answer = copy.deepcopy(li) #정렬되기 전의 리스트를 미리 복사해둔다.
for i in range(len(li)-K):
if li[i+K] != li[i]: #앞에서부터 차례로 초콜릿을 먹는것을 계산한다.
result += li[i+K] - li[i]
li[i+K] = li[i] #초콜릿을 먹었으면 for문 탈출
break
li.sort() #먹고난후 정렬했는데
if answer == li: #먹은 초콜릿이 없어서 처음에 복사해둔 list에서 변화하지 않았으면 더이상 먹을 초콜릿이 없다는뜻
print("{} {}".format(result, day))
exit()
day +=1 #초콜릿을 먹었으면 day +=1