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 | 31 |
Tags
- java lambda
- 재귀함수
- 자바
- 자바 재귀 조합
- jquery 필터선택자
- 자바 조합 재귀
- 알고리즘
- 자바입출력
- 알고리즘 그래프
- inner class
- Interface
- str to char array
- jquery 속성선택자
- 서로소
- java Collections.sort()
- 상속
- jquery 이벤트 처리
- 후위표기
- 조합 재귀
- parseInt()
- 자바스크립트 이벤트처리
- 재귀
- Java
- jquery dom 계층 선택자
- 순열코드
- java 내부 클래스
- char to str
- 순열 재귀
- 자바 순열 코드
- 자바스크립트 이벤트중지
Archives
- Today
- Total
유블로그
[Java] swea 2115 벌꿀채취 본문
[Java] swea 2115 벌꿀채취
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 모의SW_2115_벌꿀채취 {
static int N, M, C, MAX;
static int[][] map;
static int[][] money;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int testcase = 1; testcase <= T; testcase++) {
MAX = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
map = new int[N][N];
money = new int[N][N-M+1];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
solve();
for (int x = 0; x < N; x++) {
for (int y = 0; y < N-M+1; y++) {
int sum = money[x][y];
for (int i = x; i < N; i++) {
for (int j = 0; j < N-M+1; j++) {
if(x == i && Math.abs(y-j) < M) continue;
if(MAX < sum + money[i][j]) MAX = sum + money[i][j];
} //j
}//i
}// y
}//x
System.out.println("#" + testcase + " " + MAX);
} //tc
} //main
private static void solve() {
for (int i = 0; i < N; i++) {
int order = 0;
for (int j = 0; j <= N-M; j++) {
int[] arr = new int[M];
int idx = 0;
for (int k = j; k < j+M; k++) {
arr[idx++] = map[i][k];
} // k
moneyMAX = 0;
getMAX(arr, 0, 0, 0);
money[i][order] = moneyMAX;
order++;
} // j
} // i
} //solve
static int moneyMAX;
private static void getMAX(int[] arr, int cur, int sum, int zegopSum) {
if(cur == arr.length) {
if(moneyMAX < zegopSum) moneyMAX = zegopSum;
return;
}
if(sum + arr[cur] <= C)
getMAX(arr, cur+1, sum+arr[cur], zegopSum+arr[cur]*arr[cur]);
getMAX(arr, cur+1, sum, zegopSum);
}
}
M개 연속으로 꿀통을 선택하여 최대 수익이 나오는 배열을 만들었다.
그게 getMax() 가 하는 일이다.
getMax 가 받는 일차원 배열은
위 그림에서 봤을 때 {6,1} , {8,5} 이런걸 받는 것..
일차원 배열을 받아서 6*6 + 1*1 이 가능한지(합이 C를 넘으면 안되므로), 안 된다면 어떤 벌꿀을 채취해야 수익이 큰 지 찾는다.
그리고 나서
가로로 슬라이드를 옮기면서
money 배열에 입력한다.
마지막엔 money배열을 돌면서
두 개 배열을 뽑고 그 두 개 배열이 겹치지 않는지, 안 겹친다면 더했을 때 최대가 나오는지 확인한다.
'알고리즘' 카테고리의 다른 글
[Java] swea 2383 점심식사시간 (0) | 2021.04.21 |
---|---|
[Java] swea 2477 차량정비소 (0) | 2021.04.21 |
[Java] swea 2117 홈방범서비스 (0) | 2021.04.19 |
[Java] swea 2112 보호필름 (0) | 2021.04.19 |
[Java] swea 4014 활주로 건설 (0) | 2021.04.17 |