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 1ea7038

Browse files
Merge pull request #78 from GreatAlgorithm-Study/xubin
[6주차] 배수빈
2 parents ff73fc6 + 6d17422 commit 1ea7038

File tree

9 files changed

+355
-0
lines changed

9 files changed

+355
-0
lines changed

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
public class SB_2110 {
8+
static int N, C;
9+
static int[] house;
10+
11+
private static boolean canWifi(int dist) {
12+
int cnt = 1;
13+
int pre = house[0];
14+
for (int i = 1; i < N; i++) {
15+
if (house[i]-pre >= dist){
16+
cnt++;
17+
pre = house[i];
18+
}
19+
if (cnt >=C) return true;
20+
}
21+
return false;
22+
}
23+
public static void main(String[] args) throws IOException {
24+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
25+
StringTokenizer st = new StringTokenizer(br.readLine());
26+
27+
N = Integer.parseInt(st.nextToken());
28+
C = Integer.parseInt(st.nextToken());
29+
30+
house = new int[N];
31+
for (int i = 0; i < N; i++) {
32+
house[i] = Integer.parseInt(br.readLine());
33+
}
34+
Arrays.sort(house);
35+
36+
// 거리: mid, 공유기 개수: C (조건)
37+
int s = 1;
38+
int e = house[N-1] - house[0];
39+
int parm = 0;
40+
while (s <= e) {
41+
int mid = (s + e) / 2;
42+
if (canWifi(mid)) { // 공유기 가능하면 거리 더 늘려보기
43+
parm = mid;
44+
s = mid+1;
45+
}else e = mid-1;
46+
}
47+
System.out.println(parm);
48+
}
49+
}

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

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
import java.util.StringTokenizer;
6+
7+
public class SB_2805 {
8+
static int N, M;
9+
static int[] trees;
10+
11+
// 파라미터 서치: 잘린 길이가 M보다 크거나 같은가
12+
// 높이 최대값: mid변수
13+
private static boolean canGet(int idx, int h) {
14+
long cnt = 0;
15+
for (int i = idx; i < N; i++) {
16+
cnt += trees[i]-h;
17+
if (cnt>=M) return true;
18+
}
19+
return cnt>=M;
20+
}
21+
22+
private static int findIdx(int h) { // 얘도 upper-bound로 인덱스 위치 찾기
23+
int left = 0;
24+
int right = N; // upper-bound시 탐색범위는 [0,N)
25+
while (left < right){
26+
int mid = (left+right)/2;
27+
if (trees[mid] <= h) left = mid+1;
28+
else right = mid;
29+
}
30+
return left;
31+
}
32+
public static void main(String[] args) throws IOException {
33+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
34+
StringTokenizer st = new StringTokenizer(br.readLine());
35+
36+
N = Integer.parseInt(st.nextToken());
37+
M = Integer.parseInt(st.nextToken());
38+
39+
trees = new int[N];
40+
st = new StringTokenizer(br.readLine());
41+
for (int i = 0; i < N; i++) {
42+
trees[i] = Integer.parseInt(st.nextToken());
43+
}
44+
45+
Arrays.sort(trees);
46+
47+
int left = 0; // 절단기 높이값이 작을 수록 많이 자름
48+
int right = trees[N-1];
49+
int parm = 0;
50+
51+
while (left <= right){ // 절단기 높이의 최대값이므로 upper-bound
52+
int height = (left+right)/2;
53+
int idx = findIdx(height);
54+
if (canGet(idx, height)) {
55+
parm = height;
56+
left = height+1; // 나무 얻을 수 있으면 높이 조금 더 높여보기
57+
}
58+
else right = height-1;
59+
}
60+
System.out.println(parm);
61+
}
62+
}

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

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+
import java.util.StringTokenizer;
5+
6+
public class SB_7579 {
7+
static int N, M;
8+
static int[] memo, cost;
9+
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+
M = Integer.parseInt(st.nextToken());
17+
18+
memo = new int[N];
19+
cost = new int[N];
20+
21+
st = new StringTokenizer(br.readLine());
22+
for (int i = 0; i < N; i++) {
23+
memo[i] = Integer.parseInt(st.nextToken());
24+
}
25+
26+
st = new StringTokenizer(br.readLine());
27+
for (int i = 0; i < N; i++) {
28+
cost[i] = Integer.parseInt(st.nextToken());
29+
}
30+
31+
// 비활성화 비용 최소화로 M바이트 확보
32+
int[] dp = new int[10001];
33+
34+
// dp[i] = j : i비용으로 얻을 수 있는 최대 메모리 j
35+
for (int i = 0; i <N; i++) { // 앱 번호
36+
for (int j = 10000; j >=cost[i]; j--) { // 비용
37+
dp[j] = Math.max(dp[j], dp[j - cost[i]] + memo[i]);
38+
}
39+
}
40+
41+
int ans = 0;
42+
for (int i = 0; i <= 10000; i++) {
43+
if (dp[i] >=M) {
44+
ans = i;
45+
break;
46+
}
47+
}
48+
System.out.println(ans);
49+
}
50+
}

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.StringTokenizer;
5+
6+
public class SB_9084 {
7+
private static int calMethod(int N, int[] coin, int M) {
8+
int[] dp = new int[M + 1];
9+
dp[0] = 1;
10+
11+
for (int c : coin) {
12+
for (int i = c; i <= M; i++) {
13+
dp[i] += dp[i - c];
14+
}
15+
}
16+
return dp[M];
17+
}
18+
public static void main(String[] args) throws IOException {
19+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
20+
StringTokenizer st;
21+
StringBuilder sb = new StringBuilder();
22+
23+
int T = Integer.parseInt(br.readLine());
24+
25+
while (T-- > 0) {
26+
int N = Integer.parseInt(br.readLine());
27+
int[] coin = new int[N];
28+
st = new StringTokenizer(br.readLine());
29+
for (int i = 0; i < N; i++) {
30+
coin[i] = Integer.parseInt(st.nextToken());
31+
}
32+
int M = Integer.parseInt(br.readLine());
33+
34+
sb.append(calMethod(N, coin, M)).append('\n');
35+
}
36+
System.out.println(sb);
37+
}
38+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class SB_테트리스_블럭_안의_합_최대화_하기 {
5+
static int N,M;
6+
static int[][] board;
7+
static boolean[][] visited;
8+
static int mx = 0;
9+
static int[] dx = {-1, 1, 0, 0};
10+
static int[] dy = {0, 0, -1, 1};
11+
12+
private static void dfs(int x, int y, int depth, int total) {
13+
// if (mx > mx*(4-depth)+total) return;
14+
if(depth==4){
15+
mx = Math.max(mx, total);
16+
return;
17+
}
18+
19+
for (int i = 0; i < 4; i++) {
20+
int nx = x+dx[i];
21+
int ny = y+dy[i];
22+
if (!isValid(nx, ny) || visited[nx][ny]) continue;
23+
if (depth == 2) {
24+
visited[nx][ny] = true;
25+
dfs(x, y, depth+1, total+board[nx][ny]); // ᅮ 가 갈라지는 중점에서 양옆 탐색
26+
visited[nx][ny] = false;
27+
}
28+
visited[nx][ny] = true;
29+
dfs(nx, ny, depth+1, total+board[nx][ny]);
30+
visited[nx][ny] = false;
31+
}
32+
}
33+
34+
private static boolean isValid(int x, int y) {
35+
return 0<=x && x<N && 0<=y && y<M;
36+
}
37+
public static void main(String[] args) throws IOException {
38+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
39+
StringTokenizer st = new StringTokenizer(br.readLine());
40+
41+
N = Integer.parseInt(st.nextToken());
42+
M = Integer.parseInt(st.nextToken());
43+
44+
board = new int[N][M];
45+
visited = new boolean[N][M];
46+
for(int i=0; i<N; i++){
47+
st = new StringTokenizer(br.readLine());
48+
for (int j = 0; j < M; j++) {
49+
board[i][j] = Integer.parseInt(st.nextToken());
50+
}
51+
}
52+
53+
for (int i = 0; i < N; i++) {
54+
for (int j = 0; j < M; j++) {
55+
visited[i][j] = true;
56+
dfs(i, j, 1, board[i][j]);
57+
visited[i][j] = false;
58+
}
59+
}
60+
System.out.println(mx);
61+
}
62+
}

‎Programmers/Level3/SB_42861.java‎

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

‎Programmers/Level3/SB_43238.java‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
private static boolean canCheck(long target, int[] times, int n) {
5+
long cnt = 0;
6+
for (int tm : times) {
7+
cnt += target / tm;
8+
if (cnt >= n) return true;
9+
}
10+
return false;
11+
}
12+
public static long solution(int n, int[] times) {
13+
Arrays.sort(times);
14+
15+
// 매개변수 탐색, 주어진 시간 내 n명 이상의 사람 처리할 수 있는지
16+
long left = 0;
17+
long right = (long) times[times.length - 1] * n; // 최대 시간
18+
19+
long parm = 0;
20+
while (left <= right) {
21+
long mid = (left + right) / 2;
22+
if (canCheck(mid, times, n)) {
23+
parm = mid;
24+
right = mid - 1;
25+
} else {
26+
left = mid + 1;
27+
}
28+
}
29+
return parm;
30+
}
31+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# 각 급여 범주에 대한 은행 계좌 수를 계산
2+
# 결과표에는 세 가지 범주가 모두 포함되어야 합니다. 카테고리에 계정이 없으면 0 반환
3+
4+
SELECT 'High Salary' AS category,
5+
SUM(income > 50000) AS accounts_count
6+
FROM Accounts
7+
UNION
8+
SELECT 'Average Salary' AS category,
9+
SUM(income BETWEEN 20000 AND 50000) AS accounts_count
10+
FROM Accounts
11+
UNION
12+
SELECT 'Low Salary' AS category,
13+
SUM(income < 20000) AS accounts_count
14+
FROM Accounts
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 최소 5명의 직속 부하 직원이 있는 관리자를 찾기
2+
3+
SELECT e.name
4+
FROM Employee e
5+
JOIN Employee m ON e.id = m.managerId
6+
GROUP BY m.managerId
7+
HAVING COUNT(m.managerId) >=5;

0 commit comments

Comments
(0)

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