Skip to content

Commit 0cc5091

Browse files
authored
Merge pull request #31 from GreatAlgorithm-Study/xubin
[3주차] 배수빈
2 parents d0330d3 + 8064d6e commit 0cc5091

File tree

8 files changed

+484
-0
lines changed

8 files changed

+484
-0
lines changed

BOJ/10001-15000번/SB_13335.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayDeque;
5+
import java.util.Queue;
6+
import java.util.StringTokenizer;
7+
8+
public class SB_13335 {
9+
static int N, W, L;
10+
static int[] trucks;
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+
W = Integer.parseInt(st.nextToken()); // 다리 길이
17+
L = Integer.parseInt(st.nextToken()); // 다리 최대하중
18+
19+
trucks = new int[N];
20+
st = new StringTokenizer(br.readLine());
21+
for (int i = 0; i < N; i++) {
22+
trucks[i] = Integer.parseInt(st.nextToken());
23+
}
24+
25+
Queue<Truck> que = new ArrayDeque<>();
26+
que.offer(new Truck(trucks[0], 1));
27+
28+
int weight = trucks[0];
29+
int time = 1;
30+
int idx = 1;
31+
while (!que.isEmpty()) {
32+
time++;
33+
34+
if (time - que.peek().inTime == W)
35+
weight -= que.poll().w;
36+
37+
if (idx < N && weight + trucks[idx] <= L && que.size() < W) { // 다리에 트럭추가 가능 시
38+
que.offer(new Truck(trucks[idx], time));
39+
weight += trucks[idx];
40+
idx++;
41+
}
42+
}
43+
System.out.println(time);
44+
45+
}
46+
static class Truck{
47+
int w;
48+
int inTime;
49+
50+
Truck(int w, int inTime) {
51+
this.w = w;
52+
this.inTime = inTime;
53+
}
54+
}
55+
}

BOJ/15001-20000번/SB_15989.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.Arrays;
5+
6+
// 1, 2, 3 더하기 4
7+
8+
public class SB_15989 {
9+
public static void main(String[] args) throws IOException {
10+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
11+
int T = Integer.parseInt(br.readLine());
12+
13+
int[] nums = new int[T];
14+
int mx = -1;
15+
for (int i = 0; i < T; i++) {
16+
nums[i] = Integer.parseInt(br.readLine());
17+
if (nums[i] > mx) mx = nums[i];
18+
}
19+
20+
int[][] dp = new int[4][mx + 1];
21+
22+
Arrays.fill(dp[1], 1);
23+
dp[1][0] = 0;
24+
25+
for (int i = 2; i <= 3; i++) {
26+
for (int j = i; j <= mx; j++) {
27+
if (i==j) {
28+
dp[i][j] = 1;
29+
continue;
30+
}
31+
for (int k = i; k > 0; k--) {
32+
dp[i][j] += dp[k][j-i];
33+
}
34+
}
35+
}
36+
37+
StringBuilder sb = new StringBuilder();
38+
for (int n : nums) {
39+
sb.append(dp[1][n] + dp[2][n] + dp[3][n]).append('\n');
40+
}
41+
System.out.println(sb);
42+
}
43+
}

BOJ/15001-20000번/SB_18404.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayDeque;
5+
import java.util.Arrays;
6+
import java.util.Queue;
7+
import java.util.StringTokenizer;
8+
9+
public class SB_18404 {
10+
static int N, M;
11+
static int[][] board;
12+
static int[] caught;
13+
static int[] dx = {-2, -2, -1, -1, 1, 1, 2, 2, 2};
14+
static int[] dy = {-1, 1, -2, 2, -2, 2, -1, 1};
15+
16+
private static void bfs(int x, int y) {
17+
Queue<Node> que = new ArrayDeque<>();
18+
int[][] visited = new int[N+1][N+1];
19+
for (int[] row : visited){
20+
Arrays.fill(row, -1);
21+
}
22+
visited[x][y] = 0;
23+
que.offer(new Node(x, y));
24+
25+
int cnt = 0;
26+
while (!que.isEmpty()){
27+
Node knit = que.poll();
28+
if (board[knit.x][knit.y] > 0) {
29+
caught[board[knit.x][knit.y]] = visited[knit.x][knit.y];
30+
cnt++;
31+
}
32+
if (cnt==M) break;
33+
34+
for (int i = 0; i < 8; i++) {
35+
int nx = knit.x + dx[i];
36+
int ny = knit.y + dy[i];
37+
if (!(0<nx && nx<=N && 0<ny && ny<=N)) continue;
38+
if (visited[nx][ny]==-1){
39+
que.offer(new Node(nx, ny));
40+
visited[nx][ny] = visited[knit.x][knit.y] + 1;
41+
}
42+
}
43+
}
44+
}
45+
public static void main(String[] args) throws IOException {
46+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
47+
StringTokenizer st = new StringTokenizer(br.readLine());
48+
N = Integer.parseInt(st.nextToken());
49+
M = Integer.parseInt(st.nextToken());
50+
51+
board = new int[N+1][N+1];
52+
caught = new int[M + 1];
53+
st = new StringTokenizer(br.readLine());
54+
int sx = Integer.parseInt(st.nextToken());
55+
int sy = Integer.parseInt(st.nextToken());
56+
57+
int idx = 1;
58+
for (int i = 0; i < M; i++) {
59+
st = new StringTokenizer(br.readLine());
60+
int x = Integer.parseInt(st.nextToken());
61+
int y = Integer.parseInt(st.nextToken());
62+
board[x][y] = idx++;
63+
}
64+
65+
bfs(sx, sy);
66+
StringBuilder sb = new StringBuilder();
67+
for (int i = 1; i <= M; i++) {
68+
sb.append(caught[i]).append(' ');
69+
}
70+
System.out.println(sb);
71+
}
72+
73+
static class Node{
74+
int x, y;
75+
76+
Node(int x, int y) {
77+
this.x = x;
78+
this.y = y;
79+
}
80+
}
81+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.StringTokenizer;
5+
6+
/*
7+
* i번째에 i가 가도록. dfs로 완전탐색
8+
* * 가지치기
9+
* - 사다리 옆에 있으면 못놓기(양옆 체크)
10+
* - 초기 올바르게 가는 행에는 놓지 말기
11+
* * 구현
12+
* - 사다리타기 함수
13+
* - 사다리 놓기 함수
14+
* */
15+
public class SB_디버깅 {
16+
static int N, M, H; // 열(사람), 선 갯수, 행(취약점, 가로)
17+
static Node[][] board;
18+
static int ans = -1;
19+
20+
private static boolean play() {
21+
for (int c = 0; c < N; c++) { // 사람 한명씩 사다리 탐 (열)
22+
int idx = c;
23+
int r = 0; // 행
24+
while (r<H){
25+
if (board[r][c].isRight) c++;
26+
else if (board[r][c].isLeft) c--;
27+
r++;
28+
}
29+
if (idx!=c) return false;
30+
}
31+
return true;
32+
}
33+
34+
private static void addLine(int depth) {
35+
if (depth>3 || ans!=-1) return;
36+
37+
for (int i = 0; i < H; i++) {
38+
for (int j = 0; j < N-1; j++) {
39+
// 사다릴 못놓으면 패쓰
40+
if (board[i][j].isLeft || board[i][j].isRight) continue; // 사다리 존재하면 놓을 수 없음
41+
if (j>0 && board[i][j-1].isLeft) continue; // 이웃 사다리 여부 확인(사다리 연속X)
42+
43+
// 사다리 놓기
44+
board[i][j].onRight();
45+
board[i][j+1].onLeft();
46+
47+
// System.out.println("depth:"+depth +" i:"+ i +" j: "+j);
48+
if (play()) {
49+
ans = depth;
50+
board[i][j].offRight();
51+
board[i][j+1].offLeft();
52+
return;
53+
}
54+
addLine(depth + 1); // 성공 못했으면 현재 상태에서 사다리 하나 더 추가해보기
55+
board[i][j].offRight(); // 사다리 되돌리기
56+
board[i][j+1].offLeft();
57+
}
58+
}
59+
}
60+
public static void main(String[] args) throws IOException {
61+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
62+
StringTokenizer st = new StringTokenizer(br.readLine());
63+
64+
N = Integer.parseInt(st.nextToken());
65+
M = Integer.parseInt(st.nextToken());
66+
H = Integer.parseInt(st.nextToken());
67+
68+
board = new Node[H][N];
69+
for (int i = 0; i < H; i++) {
70+
for (int j = 0; j < N; j++) {
71+
board[i][j] = new Node(i, j);
72+
}
73+
}
74+
75+
for (int i = 0; i < M; i++) {
76+
st = new StringTokenizer(br.readLine());
77+
int a = Integer.parseInt(st.nextToken());
78+
int b = Integer.parseInt(st.nextToken());
79+
board[a-1][b-1].onRight();
80+
board[a-1][b].onLeft();
81+
}
82+
83+
if (M==0 || play()) ans = 0;
84+
else addLine(1);
85+
86+
System.out.println(ans);
87+
}
88+
89+
static class Node{
90+
int i;
91+
int j;
92+
boolean isLeft = false;
93+
boolean isRight = false;
94+
95+
Node(int i, int j) {
96+
this.i = i;
97+
this.j = j;
98+
}
99+
100+
public void onLeft(){
101+
this.isLeft = true;
102+
}
103+
public void onRight(){
104+
this.isRight = true;
105+
}
106+
public void offLeft(){
107+
this.isLeft = false;
108+
}
109+
public void offRight(){
110+
this.isRight = false;
111+
}
112+
}
113+
}

0 commit comments

Comments
 (0)