새소식

⌨️ Algorithms/백준

[Python] 백준 23351번_물 주기

2023. 2. 11. 21:46

  • -

https://www.acmicpc.net/problem/23351

 

23351번: 물 주기

첫째 줄에 자연수 $N$, $K$, $A$, $B$가 공백을 사이에 두고 주어진다. ($2 \le N \le 100$, $1 \le K \le 100$, $1 \le A \times B < N$, $A$는 $N$의 약수)

www.acmicpc.net

 

  • 일직선으로 놓여진 N개의 화분에 캣닢이 하나씩 심어져 있음
  • 각 화분은 초기에 K만큼의 수분을 머금고 있고, 매일 아래와 같은 일이 순서대로 일어남
    • 1) 집사가 연속된 A개의 화분에 물을 줌. 이 때 물을 준 화분의 수분은 B만큼씩 증가
    • 2) 모든 화분의 수분이 1씩 감소
    • 3) 수분이 0이 된 화분에 있는 캣닢은 죽음
  • 모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력
  • 첫 날은 1일
  • 입력
    • 첫째 줄에 자연수 N, K, A, B가 공백을 사이에 두고 주어짐 (2≤N≤100, 1≤K≤100, 1≤A×B<N, A는 N의 약수)
  • 출력
    • 모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력
  • 시간 제한: 1초
  • 메모리 제한: 512 MB

 

"""
입출력 예시)

(예제 입력 1) 
6 3 2 2 -> 5

(예제 입력 2)
2 2 1 1 -> 3
"""

 

 

## 의사코드 ##

# 모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때
# -> 수분이 작은 순서대로 화분을 정렬

# while 화분에 0이 없을 동안:
#     모든 조건 수행 후 
#     화분.sort()
#     날짜 += 1

 

 

 

첫 번째 시도

 

n, k, a, b = map(int, input().split())
# 각 화분은 초기에 k만큼의 수분을 머금고 있음
pots = [k for _ in range(n)] 
day = 0 # 물을 준 날짜

# 모든 캣닢이 살아 있을 동안 반복
while 0 not in pots:
    # 연속된 a개의 화분의 수분이 b만큼 증가 
    for i in range(a):
        pots[i] += b 
    # 모든 화분의 수분 1씩 감소
    for p in pots:
        p -= 1
    # 수분이 작은 순서대로 화분을 오름차순 정렬
    pots.sort()
    # 날짜 + 1
    day += 1

print(day)

-> 시간 초과

 

 

 

통과한 코드

 

n, k, a, b = map(int, input().split())
# 각 화분은 초기에 k만큼의 수분을 머금고 있음
pots = [k for _ in range(n)] 
day = 0 # 물을 준 날짜

# 모든 캣닢이 살아 있을 동안 반복
while 0 not in pots:
    # 연속된 a개의 화분의 수분이 b만큼 증가 
    for i in range(a):
        pots[i] += b 
    # 모든 화분의 수분 1씩 감소
    for i in range(n):
        pots[i] -= 1
    # 수분이 작은 순서대로 화분을 오름차순 정렬
    pots.sort()
    # 날짜 + 1
    day += 1

print(day)

-> 모든 화분의 수분 1씩 감소할 때, for p in pots가 아닌 for i in range(n)으로 수정

 

  • 모든 캣닢이 살아 있는 기간이 최대한 길어지도록 하기 위해 수분이 작은 순서대로 정렬해야 한다는 점이 포인트
    • 탐욕 알고리즘은 구현할 때 정렬도 함께 사용된다는 점 잊지 말기 

 

  • cf) while min(pots) != 0  while 0 not in pots 보다 4 ms 더 빠름

 

 

 

 

 

참고)

 

https://hyuuny.tistory.com/135

 

[algorithm] 백준 23351 - 물 주기 (파이썬)

📚 문제 입력 출력 예제 입력 1 6 3 2 2예제 출력 1 5예제 입력 2 2 2 1 1예제 출력 2 3🧑🏻‍💻 풀이 과정 n개의 화분을 k만큼의 수분을 갖도록 초기화 하자. 화분의 수분이 0이 아닐 동안, 반복하면

hyuuny.tistory.com

 

https://velog.io/@seungjun123/%EB%B0%B1%EC%A4%80-23351%EB%B2%88-%EB%AC%BC-%EC%A3%BC%EA%B8%B0-Python-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[백준] 23351번 물 주기 (Python 파이썬)

문제랑이 집사는 고양이들이 좋아한다는 캣닢을 직접 재배하려고 한다.일직선으로 놓여진 $N$개의 화분에 캣닢이 하나씩 심어져 있다.각 화분은 초기에 $K$만큼의 수분을 머금고 있고, 매일 아래

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!