[BOJ-23351] 물 주기 Python 풀이

ParkJunHa·2023년 5월 14일

BOJ

목록 보기
57/85
post-thumbnail

[Silver III] 물 주기 - 23351

문제 링크
문제 풀이 시간 : 6분 51초

성능 요약

메모리: 31256 KB, 시간: 44 ms

분류

그리디 알고리즘, 구현, 시뮬레이션

문제 설명

랑이 집사는 고양이들이 좋아한다는 캣닢을 직접 재배하려고 한다.

일직선으로 놓여진 NN개의 화분에 캣닢이 하나씩 심어져 있다.

각 화분은 초기에 KK만큼의 수분을 머금고 있고, 매일 아래와 같은 일이 순서대로 일어난다.

랑이 집사가 연속된 AA개의 화분에 물을 준다. 이 때 물을 준 화분의 수분은 BB만큼씩 증가한다. 모든 화분의 수분이 1씩 감소한다. 수분이 0이 된 화분에 있는 캣닢은 죽는다.

모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력하는 프로그램을 작성하시오. 첫 날은 1일이다.

입력

첫째 줄에 자연수
NN,KK, AA, BB가 공백을 사이에 두고 주어진다. (
2N1002 \le N \le 100,
1K1001 \le K \le 100,
1A×B<N1 \le A \times B < N,
AANN의 약수)

출력

모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력한다.


풀이

아이디어

NN의 수만큼 KK 값을 가진 리스트 plant를 만들고, 오름차순으로 정렬한 뒤, 연속한 AA 만큼 인덱싱 한 뒤, 해당 인덱스의 값에 BB를 더해준다.

코드

N, K, A, B = map(int, input().split())
plant = sorted([K for _ in range(N)])

cnt = 0
while 0 not in plant:
    plant = sorted(list(map(lambda x:x-1, plant)))  # 1 감소
    plant[:A] = list(map(lambda x:x+B, plant[:A]))
    cnt += 1
print(cnt)

회고

랜덤한 문제를 골라서 시간을 재고 풀이하였다. 문제가 어렵지 않았지만 처음으로 시간 내애 빠르게 풀이한 문제라 기분이 좋았다.

profile
PS린이

0개의 댓글