Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- django The requested operation has failed!
- java di
- Problems occurred while performing provisioning operation
- 원격 연결 포트 포워딩
- 14711 타일 뒤집기
- windows 원격 연결 설정
- apache pythonpath
- 2661 좋은 수열
- 18233 java
- APPEND_SLASH = FALSE
- django windows 배포 에러
- The requested operation has failed!
- 18233 비트마스킹
- django apache deploy error
- 2643 java
- 2961 java
- 공유기 원격 설정
- 2643 색종이 올려 놓기
- 2961 도영이가 만든 맛있는 음식
- 1188 음식 평론가
- windows apache wsgi 에러
- 1188 java
- django 프로젝트 시작
- 2661 java
- django 웹 페이지
- django
- 14711 java
- django httpd error
- 18233 러버덕
- django settings.py
Archives
라이브러리는 도서관 아닌가요
백준 (BOJ) 23351 물주기 java 그리디 본문
https://www.acmicpc.net/problem/23351
첫 번째 풀이는 끝 화분에 물을 줘야하는 순간에 끝에서 시작하여 앞쪽으로 주는 방식이다. 이후 상태 초기화.
두 번째 풀이는 끝 화분에 물을 줘야하는 순간에 끝에서 벗어난 만큼을 앞 화분들에 연속적으로 주는 방식이다.
조건이 더 붙는다면 둘 중 하나로만 풀어야 할지도?
배열을 아래처럼 어렵게 돌리는 방법 말고 % 연산자를 활용하는 방법도 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()),k = Integer.parseInt(st.nextToken()),
a = Integer.parseInt(st.nextToken()),b = Integer.parseInt(st.nextToken());
int[] pots = new int[n];
Arrays.fill(pots, k);
int nMinus1 = n-1; // 항상 끝에 거만 체크하면 되지 않을까?
int count = 0;
int startPointCheck=0, lastPointCheck=0;
boolean flag = true;
while (pots[nMinus1]!=0){
++count;
lastPointCheck = startPointCheck + a;
if(n <= lastPointCheck){
flag = false;
}
// watering
if(flag){ // 정상 범위 동작
for(int i=startPointCheck; i<lastPointCheck; ++i){
pots[i] += b;
}
startPointCheck = lastPointCheck;
}
else{ // 범위를 넘어섰다면 한번만 뒤에서
for(int i=nMinus1; nMinus1-a<i; --i){
pots[i] += b;
}
flag = true;
startPointCheck = 0;
}
for(int i=0; i<n; ++i){
--pots[i];
}
}
System.out.print(count);
}
}
% 활용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()),k = Integer.parseInt(st.nextToken()),
a = Integer.parseInt(st.nextToken()),b = Integer.parseInt(st.nextToken());
int[] pots = new int[n];
Arrays.fill(pots, k);
int count = 0, startPoint=0, endPoint;
while (true){
count += 1;
endPoint = startPoint+a;
for(int i=startPoint; i<endPoint; ++i){
pots[i%n] += b;
}
for(int i=0; i<n; ++i){
if(--pots[i] == 0){
System.out.print(count);
return;
}
startPoint = endPoint % n;
}
}
}
}
'알고리즘 문제' 카테고리의 다른 글
백준 (BOJ) 18233 러버덕을 사랑하는 모임 java 백트래킹 (0) | 2022.06.24 |
---|---|
백준 (BOJ) 13019 A를 B로 java 그리디 (0) | 2022.06.11 |
백준 (BOJ) 17213 과일 서리 java dp (0) | 2022.06.10 |
백준 (BOJ) 21317 징검다리 건너기 java dp (2) | 2022.06.08 |
백준 (BOJ) 2705 팰린드롬 파티션 java dp (0) | 2022.05.10 |
Comments