Skip to content

Commit d61bf8f

Browse files
committed
solve: 코딩테스트 문제 풀이 - 14일차
1 parent 4a2d8c7 commit d61bf8f

File tree

3 files changed

+150
-0
lines changed

3 files changed

+150
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
5+
public class Main {
6+
public static void main(String[] args) throws IOException {
7+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
8+
StringBuilder sb = new StringBuilder();
9+
10+
int T = Integer.parseInt(br.readLine());
11+
while (T-- > 0) {
12+
int N = Integer.parseInt(br.readLine());
13+
int[][] sticker = new int[2][N];
14+
int[][] dp = new int[3][N];
15+
16+
for (int i = 0; i < 2; i++) {
17+
String[] parts = br.readLine().split(" ");
18+
for (int j = 0; j < N; j++) {
19+
sticker[i][j] = Integer.parseInt(parts[j]);
20+
}
21+
}
22+
23+
// dp 2행은 아무 것도 선택하지 않았을 때의 최대값
24+
dp[0][0] = sticker[0][0];
25+
dp[1][0] = sticker[1][0];
26+
dp[2][0] = 0;
27+
for (int i=1; i<N; i++) {
28+
dp[0][i] = Math.max(dp[1][i-1], dp[2][i-1]) + sticker[0][i];
29+
dp[1][i] = Math.max(dp[0][i-1], dp[2][i-1]) + sticker[1][i];
30+
dp[2][i] = Math.max(Math.max(dp[0][i-1], dp[1][i-1]),dp[2][i-1]);
31+
}
32+
33+
int dp0 = dp[0][N-1];
34+
int dp1 = dp[1][N-1];
35+
int dp2 = dp[2][N-1];
36+
37+
int res = Math.max(Math.max(dp0, dp1), dp2);
38+
sb.append(res + "\n");
39+
}
40+
/*
41+
for (int i = 0; i < 2; i++) {
42+
for (int j = 0; j < N; j++) {
43+
System.out.print(arr[i][j] + " ");
44+
}
45+
System.out.println();
46+
}
47+
*/
48+
System.out.print(sb.toString());
49+
}
50+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution {
2+
public int solution(int[] arrayA, int[] arrayB) {
3+
int gcdA = gcdArray(arrayA);
4+
int gcdB = gcdArray(arrayB);
5+
6+
int max = 0;
7+
if (check(gcdA, arrayB)) {
8+
max = gcdA;
9+
}
10+
if (check(gcdB, arrayA)) {
11+
max = Math.max(max, gcdB);
12+
}
13+
14+
return max;
15+
}
16+
17+
public int gcd(int a, int b) {
18+
while (b != 0) {
19+
int temp = a % b;
20+
a = b;
21+
b = temp;
22+
}
23+
return a;
24+
}
25+
26+
public int gcdArray(int[] arr) {
27+
int result = arr[0];
28+
for (int i=1; i<arr.length; i++) {
29+
result = gcd(result, arr[i]);
30+
}
31+
return result;
32+
}
33+
34+
public boolean check(int x, int[] arr) {
35+
for (int num: arr) {
36+
if (num % x == 0) {
37+
return false;
38+
}
39+
}
40+
return true;
41+
}
42+
}
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(String[][] book_time) {
5+
int answer = 0;
6+
7+
int n = book_time.length;
8+
int[][] book = new int[n][2];
9+
int[] room = new int[n];
10+
// 시작시간 기준으로 오름차순을 하고,
11+
// 한개씩 넣을 때 넣을거의 시작시간과 기존에 예약 중인 방 끝 시간 비교하여
12+
// 모든 방에 대해 [1920, 1520, 1700] 끝 시간 배열 만들어서
13+
// 순회하면서 넣을 방 찾고
14+
// 다 못넣는다면 방 추가
15+
16+
for (int i=0; i<n; i++) {
17+
String s = book_time[i][0];
18+
String e = book_time[i][1];
19+
20+
String[] parts = s.split(":");
21+
int sh = Integer.parseInt(parts[0]);
22+
int sm = Integer.parseInt(parts[1]);
23+
24+
parts = e.split(":");
25+
int eh = Integer.parseInt(parts[0]);
26+
int em = Integer.parseInt(parts[1]);
27+
28+
int start = sh*60 + sm;
29+
int end = eh*60 + em;
30+
31+
book[i][0] = start;
32+
book[i][1] = end;
33+
}
34+
35+
Arrays.sort(book, (a,b) -> a[0] - b[0]);
36+
37+
PriorityQueue<Integer> pq = new PriorityQueue<>();
38+
for (int[] b: book) {
39+
int start = b[0];
40+
int end = b[1];
41+
42+
if (!pq.isEmpty() && pq.peek() <= start) {
43+
pq.poll();
44+
}
45+
pq.offer(end + 10); // 10분 더하기
46+
}
47+
48+
/*
49+
for (int[] b: book) {
50+
System.out.println(b[0] + " " + b[1]);
51+
}
52+
for (int r: room) {
53+
System.out.println(r + " ");
54+
}
55+
*/
56+
return pq.size();
57+
}
58+
}

0 commit comments

Comments
 (0)