출처
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만큼의 수분을 머금고 있고, 매일 아래와 같은 일이 순서대로 일어난다.
- 랑이 집사가 연속된 A개의 화분에 물을 준다. 이 때 물을 준 화분의 수분은 B만큼씩 증가한다.
- 모든 화분의 수분이 1씩 감소한다.
- 수분이 0이 된 화분에 있는 캣닢은 죽는다.
모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력하는 프로그램을 작성하시오. 첫 날은 1일이다.
입력
첫째 줄에 자연수 N, K, A, B가 공백을 사이에 두고 주어진다. (2≤N≤100, 1≤K≤100, 1≤A×B<N, A는 N의 약수)
출력
모든 캣닢이 살아 있는 기간이 최대한 길어지도록 물을 줄 때, 첫 캣닢이 죽는 날짜를 출력한다.
예제

내코드
- 첫 날짜는 1부터 시작합니다.
- 화분 개수로 나머지 연산을 하여 증가시킬 화분을 구할 수 있습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int potCnt = Integer.parseInt(st.nextToken());
int firstWater = Integer.parseInt(st.nextToken());
int continuouslyCnt = Integer.parseInt(st.nextToken());
int waterCnt = Integer.parseInt(st.nextToken());
int pot[] = new int[potCnt];
for(int i = 0; i<pot.length; i++){
pot[i] = firstWater;
}
int dayCnt = 1;
int today = 0;
while(true){
for(int i = 0; i<continuouslyCnt; i++){
int n = (today+i) % potCnt;
pot[n] += waterCnt;
}
for(int i = 0; i<potCnt; i++){
pot[i] -= 1;
if(pot[i] == 0){
System.out.println(dayCnt);
return;
}
}
today = (today + continuouslyCnt) % potCnt;
dayCnt++;
}
}
}
- Arrays.fill(pot,firstWater)을 하면 물 초깃값 한번에 채울 수 있다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
| [백준] 20551번 Sort 마스터 배지훈의 후계자 (0) | 2021.11.11 |
|---|---|
| [백준] 2667번 단지번호붙이기 (0) | 2021.11.10 |
| [백준] 1463번 1로 만들기 (0) | 2021.11.10 |
| [백준] 4949번 균형잡힌 세상 (0) | 2021.11.07 |
| [백준] 1051번 숫자 정사각형 (0) | 2021.11.04 |