본문 바로가기
python3/백준문제풀이

[백준/python3] 23351_물 주기(Greedy)

by MeaninGood 2022. 1. 16.

 

 

'''
# 1. 일직선으로 N개 화분, 초기 K만큼의 수분
# 3 3 3 3 3 3

# 연속된 A개의 화분에 물 줄 때 수분 B만큼씩 증가
# 연속된 2개의 화분이 수분 2씩 증가
# 5 5 3 3 3 3

# 모든 화분 수분 1씩 감소
# 4 4 2 2 2 2

# 수분이 0된 화분 죽고, 최대한 오래 사는 게 목표
# 매일 다른 연속된 화분에 물 줘서 최대한 살아남게 해야 함
'''




'''
첫째 날 : 5 5 3 3 3 3 -> 4 4 2 2 2 2
둘째 날 : 4 4 4 4 2 2 -> 3 3 3 3 1 1
셋째 날 : 3 3 3 3 3 3 -> 2 2 2 2 2 2
넷째 날 : 4 4 2 2 2 2 -> 3 3 1 1 1 1
다섯째 날 : 3 3 3 3 1 1 -> 2 2 2 2 0 0 // break

# li = [i for i in arr[::a]]
첫째 날 : 5 3 3 -> 4 2 2
둘째 날 : 4 4 2 -> 3 3 1
셋째 날 : 3 3 3 -> 2 2 2
넷째 날 : 4 2 2 -> 3 1 1
다섯째 날 : 3 3 1 -> 2 2 0

'''






import sys

n, k, a, b  = map(int, sys.stdin.readline().split())
arr = [k] * n

# 리스트 원소 줄여주기 위에 설명 적어 둠
# 연속해서 위치한 화분에 물을 주기 때문에 한 세트 당 하나로 줄이기
# ex) 5 5 3 3 2 2 -> 5 3 2
li = [i for i in arr[::a]]

day = 0
while 0 not in li : # li 리스트 안에 0이 있으면 멈춤
    
    for i in range(len(li)) :
        li[i] -= 1 # 모든 꽃 매일 1씩 먼저 줄어들고
    
    li[li.index(min(li))] += b
    # 최소 값을 가진 꽃에 수분 b 주기

    
    day += 1 # 날짜 추가

print(day)






''' 
# li[li.index(min(li))] += b 대신 아래 for문 껴줘도 됨

min_tmp = 99999999
min_index = 0
for i in range(len(li)):
  if li[i]<min_tmp:
    min_tmp = li[i]
    min_index = i

'''