Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 56b31ea

Browse files
Merge pull request #79 from yeongleej/main
[6주차] 이지영
2 parents 1ea7038 + 92855e8 commit 56b31ea

10 files changed

+391
-0
lines changed

‎BOJ/1000-5000번/JY_2110.java‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package day1015;
2+
3+
import java.util.*;
4+
import java.io.*;
5+
6+
public class JY_2110 {
7+
8+
static int N, C;
9+
static long[] wrr;
10+
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
StringTokenizer st = new StringTokenizer(br.readLine());
14+
15+
N = Integer.parseInt(st.nextToken());
16+
C = Integer.parseInt(st.nextToken());
17+
18+
wrr = new long[N];
19+
for(int i=0; i<N; i++) {
20+
wrr[i] = Long.parseLong(br.readLine());
21+
}
22+
23+
// 집위치 정렬
24+
Arrays.sort(wrr);
25+
26+
long s = 0;
27+
long e = (wrr[N-1] - wrr[0]);
28+
while(s < e) {
29+
// 인접한 두 공유기 사이의 거리
30+
long mid = (s + e) / 2;
31+
32+
long nextPos = 0;
33+
int cnt = 0;
34+
for(int i=0; i<N; i++) {
35+
// 공유기 새로 설치해야 함
36+
if(wrr[i] >= nextPos) {
37+
nextPos = wrr[i] + mid;
38+
cnt++;
39+
}
40+
}
41+
42+
// 필요한 공유기수가 더 많거나 같으면 거리를 늘릴 수 있음
43+
if(cnt >= C) {
44+
s = mid + 1;
45+
}
46+
// 필요한 공유기수가 더 작으면 거리를 좁혀야 함
47+
else {
48+
e = mid;
49+
}
50+
}
51+
52+
System.out.println(e);
53+
}
54+
55+
}

‎BOJ/1000-5000번/JY_2805.java‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package day1015;
2+
3+
import java.util.*;
4+
import java.io.*;
5+
6+
public class JY_2805 {
7+
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+
12+
int N = Integer.parseInt(st.nextToken());
13+
int M = Integer.parseInt(st.nextToken());
14+
15+
int[] trr = new int[N];
16+
int maxH = Integer.MIN_VALUE;
17+
st = new StringTokenizer(br.readLine());
18+
for(int i=0; i<N; i++) {
19+
trr[i] = Integer.parseInt(st.nextToken());
20+
maxH = Math.max(maxH, trr[i]);
21+
}
22+
23+
24+
int s = 0;
25+
int e = maxH;
26+
int ans = 0;
27+
while(s <= e) {
28+
int mid = (s + e) / 2;
29+
30+
long total = 0;
31+
for(int i=0; i<N; i++) {
32+
if(trr[i] > mid) total += (trr[i]-mid);
33+
}
34+
35+
// 자른길이가 M보다 작다면 높이를 더 낮게 설정해서 자른길이의 합을 늘려야 함
36+
if(total < M) {
37+
e = mid - 1;
38+
} else {
39+
ans = mid;
40+
s = mid + 1;
41+
}
42+
}
43+
44+
System.out.println(ans);
45+
46+
}
47+
48+
}

‎BOJ/5001-10000번/JY_7579.java‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package day1016;
2+
3+
import java.util.*;
4+
import java.io.*;
5+
6+
public class JY_7579 {
7+
8+
// 최대 비용(100개 * 100)
9+
static int MAX_COST = 10001;
10+
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
StringTokenizer st = new StringTokenizer(br.readLine());
14+
15+
int N = Integer.parseInt(st.nextToken());
16+
int M = Integer.parseInt(st.nextToken());
17+
18+
int[] mrr = new int[N+1];
19+
st = new StringTokenizer(br.readLine());
20+
for(int i=1; i<N+1; i++) {
21+
mrr[i] = Integer.parseInt(st.nextToken());
22+
}
23+
int[] crr = new int[N+1];
24+
st = new StringTokenizer(br.readLine());
25+
for(int i=1; i<N+1; i++) {
26+
crr[i] = Integer.parseInt(st.nextToken());
27+
}
28+
29+
// dp[i][j] : i번쨰까지 확인했을때, j비용으로 비활성화할 수 있는 최대메모리
30+
int[][] dp = new int[N+1][MAX_COST];
31+
for(int i=1; i<N+1; i++) {
32+
// 비용은 0이될 수 있음
33+
for(int j=0; j<MAX_COST; j++) {
34+
if(j < crr[i]) {
35+
dp[i][j] = dp[i-1][j];
36+
} else {
37+
dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-crr[i]]+mrr[i]);
38+
}
39+
}
40+
}
41+
42+
int ans = 0;
43+
// 적은 비용부터 탐색하며서 비활성화한 최대메모리가 M이상이면, 그때 비용이 최소비용
44+
for(int j=0; j<MAX_COST; j++) {
45+
if(dp[N][j] >= M) {
46+
ans = j;
47+
break;
48+
}
49+
}
50+
51+
System.out.println(ans);
52+
}
53+
54+
}

‎BOJ/5001-10000번/JY_9084.java‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package day1016;
2+
3+
import java.util.*;
4+
import java.io.*;
5+
6+
public class JY_9084 {
7+
8+
static int MAX_COST = 10001;
9+
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
StringTokenizer st = new StringTokenizer(br.readLine());
13+
14+
int T = Integer.parseInt(st.nextToken());
15+
for(int t=0; t<T; t++) {
16+
st = new StringTokenizer(br.readLine());
17+
int N = Integer.parseInt(st.nextToken());
18+
19+
int[] coin = new int[N+1];
20+
st = new StringTokenizer(br.readLine());
21+
for(int i=1; i<N+1; i++) {
22+
coin[i] = Integer.parseInt(st.nextToken());
23+
}
24+
25+
int M = Integer.parseInt(br.readLine());
26+
27+
int[] dp = new int[MAX_COST];
28+
29+
// 0원을 만드는 경우 : 1
30+
dp[0] = 1;
31+
// dp[j] : j원을 만들 수 있는 경우의 수
32+
// dp[j] : i-1번쨰 동전까지 확인했을 때 j를 만들 수 있는 경우의 수 + 새로운 i번쨰 동전으로 만들 수 있는 경우의수
33+
for(int i=1; i<N+1; i++) {
34+
for(int j=coin[i]; j<M+1; j++) {
35+
dp[j] = dp[j] + dp[j-coin[i]];
36+
}
37+
}
38+
39+
System.out.println(dp[M]);
40+
}
41+
42+
}
43+
44+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package day1014;
2+
3+
import java.util.*;
4+
import java.io.*;
5+
6+
public class JY_테트리스_블럭_안의_합_최대화_하기 {
7+
8+
static int N, M;
9+
static int[][] g;
10+
static boolean[][] visited;
11+
static int ans;
12+
// 현재 그래프 값 중 가장 큰 것
13+
static int maxValue;
14+
static int[] dx = {0, 0, -1, 1};
15+
static int[] dy = {-1, 1, 0, 0};
16+
17+
18+
public static void main(String[] args) throws IOException {
19+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
20+
StringTokenizer st = new StringTokenizer(br.readLine());
21+
22+
N = Integer.parseInt(st.nextToken());
23+
M = Integer.parseInt(st.nextToken());
24+
25+
g = new int[N][M];
26+
maxValue = Integer.MIN_VALUE;
27+
for(int i=0; i<N; i++) {
28+
st = new StringTokenizer(br.readLine());
29+
for(int j=0; j<M; j++) {
30+
g[i][j] = Integer.parseInt(st.nextToken());
31+
maxValue = Math.max(maxValue, g[i][j]);
32+
}
33+
}
34+
35+
visited = new boolean[N][M];
36+
ans = Integer.MIN_VALUE;
37+
for(int i=0; i<N; i++) {
38+
for(int j=0; j<M; j++) {
39+
visited[i][j] = true;
40+
dfs(i, j, 1, g[i][j]);
41+
visited[i][j] = false;
42+
}
43+
}
44+
45+
System.out.println(ans);
46+
47+
}
48+
public static boolean inRange(int x, int y) {
49+
return x>=0 && x<N && y>=0 && y<M;
50+
}
51+
public static void dfs(int x, int y, int depth, int total) {
52+
// 4개의 블록 모두 탐색
53+
if(depth == 4) {
54+
ans = Math.max(ans, total);
55+
return;
56+
}
57+
// 가지치기
58+
// 현재까지 탐색한 결과에 앞으로 최댓값만 추가한다고 해도 ans값보다 작으면 탐색X
59+
if(ans >= total+maxValue*(4-depth)) return;
60+
61+
for(int i=0; i<4; i++) {
62+
int nx = x + dx[i];
63+
int ny = y + dy[i];
64+
if(!inRange(nx, ny)) continue;
65+
if(visited[nx][ny]) continue;
66+
// 2번째 블럭인 경우, ᅡ ᅥ ᅩ ᅮ 처럼 2번째 블록에서 연결된 2개의 블록을 찾아야한다.
67+
if(depth == 2) {
68+
visited[nx][ny] = true;
69+
dfs(x, y, depth+1, total+g[nx][ny]);
70+
visited[nx][ny] = false;
71+
}
72+
73+
// 2번쨰 블록 이외에는 일반탐색
74+
visited[nx][ny] = true;
75+
dfs(nx, ny, depth+1, total+g[nx][ny]);
76+
visited[nx][ny] = false;
77+
78+
}
79+
}
80+
81+
}

‎Programmers/Level3/JY_42861.java‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
5+
static int[] parents;
6+
7+
public int solution(int n, int[][] costs) {
8+
int answer = 0;
9+
10+
parents = new int[n];
11+
for(int i=0; i<n; i++) {
12+
parents[i] = i;
13+
}
14+
15+
// 비용 순으로 정렬
16+
Arrays.sort(costs, (o1, o2)->(o1[2]-o2[2]));
17+
18+
for(int[] cost: costs) {
19+
if(find(cost[0]) != find(cost[1])) {
20+
union(cost[0], cost[1]);
21+
answer += cost[2];
22+
}
23+
}
24+
25+
return answer;
26+
}
27+
public static int find(int x) {
28+
if(parents[x] != x) {
29+
parents[x] = find(parents[x]);
30+
}
31+
return parents[x];
32+
}
33+
public static void union(int a, int b) {
34+
int pa = find(a);
35+
int pb = find(b);
36+
37+
if(pa != pb) {
38+
parents[pb] = pa;
39+
}
40+
}
41+
}

‎Programmers/Level3/JY_43238.java‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public long solution(int n, int[] times) {
3+
long answer = 0;
4+
int T = times.length;
5+
6+
// 가장 시간이 오래걸리는 심사관
7+
long maxTime = 0;
8+
for(int i=0; i<T; i++){
9+
maxTime = Math.max(maxTime, times[i]);
10+
}
11+
12+
long s = 1;
13+
long e = maxTime*n;
14+
15+
while(s <= e) {
16+
long mid = (s + e) / 2;
17+
// 현재 시간(mid)으로 심사할 수 있는 인원수 구하기
18+
long pCnt = calPeople(n, mid, times);
19+
20+
// n명보다 많다면 가능하고, 시간 더 줄일 수 있음
21+
if(n <= pCnt) {
22+
answer = mid;
23+
e = mid - 1;
24+
} else{
25+
s = mid + 1;
26+
}
27+
28+
}
29+
30+
return answer;
31+
}
32+
public static long calPeople(int n, long t, int[] times) {
33+
long total = 0;
34+
for(int i=0; i<times.length; i++) {
35+
// 한명당 심사할 수 있는 인원 수: 실행시간 / 심사시간
36+
total += (t / times[i]);
37+
if(total > n) break;
38+
}
39+
return total;
40+
}
41+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-- 대장균 자식의 수 구하기
2+
-- https://school.programmers.co.kr/learn/courses/30/lessons/299305
3+
4+
SELECT P.ID, COUNT(C.ID) AS CHILD_COUNT
5+
FROM ECOLI_DATA P
6+
LEFT JOIN ECOLI_DATA C
7+
ON P.ID = C.PARENT_ID
8+
GROUP BY(P.ID)
9+
ORDER BY P.ID;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-- 재구매가 일어난 상품과 회원 리스트 구하기
2+
-- https://school.programmers.co.kr/learn/courses/30/lessons/131536
3+
4+
SELECT USER_ID, PRODUCT_ID
5+
FROM ONLINE_SALE
6+
GROUP BY USER_ID, PRODUCT_ID
7+
HAVING COUNT(USER_ID) >= 2
8+
ORDER BY USER_ID, PRODUCT_ID DESC

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /