[BOJ]백준#23322 Silver 3 초콜릿 뺏어 먹기 🍪 (Python, 파이썬)

임준성·2022년 6월 6일
0

백준 Algorithm

목록 보기
25/59
post-thumbnail

백준 23322번
https://www.acmicpc.net/problem/23322


문제



후기

⏰ 풀이시간 1시간 ++⏰

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
profile
아무띵크 있이

0개의 댓글