Skip to content

Commit 6db66c5

Browse files
authored
Merge pull request #35 from solid-connection/JAEHEE25
[Week04] BOJ 14925: 목장 건설하기
2 parents e34aa02 + d01e8dd commit 6db66c5

File tree

4 files changed

+117
-0
lines changed

4 files changed

+117
-0
lines changed

personal/JAEHEE25/BOJ/BOJ2156.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import java.util.*;
2+
import java.lang.*;
3+
import java.io.*;
4+
5+
class BOJ2156 {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
int N = Integer.parseInt(br.readLine());
9+
int[] wines = new int[N+1];
10+
for (int i = 1; i <= N; i++) {
11+
wines[i] = Integer.parseInt(br.readLine());
12+
}
13+
14+
int[] dp = new int[N+1]; //dp[i] = i까지 최대로 마실 수 있는 포도주의 양
15+
for (int i = 1; i <= N; i++) {
16+
if (i == 1) dp[1] = wines[1];
17+
else if (i == 2) dp[2] = wines[1] + wines[2];
18+
else dp[i] = Math.max(dp[i-1], wines[i] + Math.max(dp[i-2], dp[i-3] + wines[i-1]));
19+
}
20+
21+
System.out.println(dp[N]);
22+
23+
}
24+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int[][] jobs) {
5+
Arrays.sort(jobs, (o1, o2) -> o1[0] - o2[0]); //요청 시각 기준 정렬
6+
7+
PriorityQueue<Job> waitQueue = new PriorityQueue<>(); //대기 큐
8+
9+
int totalTime = 0;
10+
int ji = 0; //jobs 인덱스
11+
int time = 0; //현재 시간
12+
int endCnt = 0; //종료한 작업 수
13+
14+
while (endCnt < jobs.length) {
15+
//현재 시간 전까지의 작업 모두 대기 큐에 삽입
16+
while (ji < jobs.length && jobs[ji][0] <= time) {
17+
waitQueue.add(new Job(ji, jobs[ji][0], jobs[ji][1]));
18+
ji++;
19+
}
20+
21+
//대기 큐에서 꺼내서 작업 시작
22+
if (!waitQueue.isEmpty()) {
23+
Job job = waitQueue.poll();
24+
time += job.processTime;
25+
totalTime += (time - job.requestTime);
26+
endCnt++;
27+
} else {
28+
time = jobs[ji][0]; //처리할 작업이 없으면 다음 작업 요청 시간으로 이동
29+
}
30+
}
31+
32+
return totalTime / jobs.length;
33+
}
34+
}
35+
36+
class Job implements Comparable<Job> {
37+
int num;
38+
int requestTime;
39+
int processTime;
40+
41+
Job(int num, int requestTime, int processTime) {
42+
this.num = num;
43+
this.requestTime = requestTime;
44+
this.processTime = processTime;
45+
}
46+
47+
@Override
48+
public int compareTo(Job o) {
49+
//소요시간이 짧은 것 -> 요청 시각이 빠른 것 -> 번호가 작은 것
50+
if (this.processTime == o.processTime) {
51+
if (this.requestTime == o.requestTime) {
52+
return this.num - o.num;
53+
}
54+
return this.requestTime - o.requestTime;
55+
}
56+
return this.processTime - o.processTime;
57+
}
58+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package week04.BOJ_14925_목장건설하기;
2+
3+
import java.util.*;
4+
import java.lang.*;
5+
import java.io.*;
6+
7+
class BOJ14925 {
8+
public static void main(String[] args) throws IOException {
9+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
10+
StringTokenizer st = new StringTokenizer(br.readLine());
11+
int M = Integer.parseInt(st.nextToken());
12+
int N = Integer.parseInt(st.nextToken());
13+
int[][] land = new int[M][N];
14+
int[][] dp = new int[M+1][N+1];
15+
int L = 0;
16+
17+
for (int i = 0; i < M; i++) {
18+
st = new StringTokenizer(br.readLine());
19+
for (int j = 0; j < N; j++) {
20+
land[i][j] = Integer.parseInt(st.nextToken());
21+
}
22+
}
23+
24+
int answer = 0;
25+
for (int i = 1; i <= M; i++) {
26+
for (int j = 1; j <= N; j++) {
27+
if (land[i-1][j-1] == 0) {
28+
dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1; //위, 왼쪽, 왼쪽 위
29+
answer = Math.max(dp[i][j], answer);
30+
}
31+
}
32+
}
33+
System.out.println(answer);
34+
}
35+
}

0 commit comments

Comments
 (0)