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 a4944a7

Browse files
authored
Merge pull request #64 from GreatAlgorithm-Study/xubin
[5주차] 배수빈
2 parents 532364a + f20f05b commit a4944a7

File tree

9 files changed

+448
-0
lines changed

9 files changed

+448
-0
lines changed

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

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.StringTokenizer;
6+
7+
public class SB_1967 {
8+
static int N;
9+
static ArrayList<Node>[] tree;
10+
static boolean[] visited;
11+
static int tmpNode;
12+
static int mx = -1;
13+
14+
private static void dfs(int cur, int dist) {
15+
if (dist > mx){
16+
mx = dist;
17+
tmpNode = cur;
18+
}
19+
20+
visited[cur] = true;
21+
22+
for (int i = 0; i < tree[cur].size(); i++) { // 현재 노드의 자식들 돌며
23+
Node nxt = tree[cur].get(i);
24+
if (visited[nxt.idx]) continue;
25+
dfs(nxt.idx, nxt.w + dist);
26+
visited[nxt.idx] = true;
27+
}
28+
}
29+
public static void main(String[] args) throws IOException {
30+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
31+
StringTokenizer st;
32+
N = Integer.parseInt(br.readLine());
33+
34+
tree = new ArrayList[N + 1];
35+
for (int i = 0; i <= N; i++) {
36+
tree[i] = new ArrayList<>();
37+
}
38+
39+
for (int i = 0; i < N-1; i++) {
40+
st = new StringTokenizer(br.readLine());
41+
int p = Integer.parseInt(st.nextToken());
42+
int c = Integer.parseInt(st.nextToken());
43+
int w = Integer.parseInt(st.nextToken());
44+
tree[p].add(new Node(c, w));
45+
tree[c].add(new Node(p, w));
46+
}
47+
48+
visited = new boolean[N + 1];
49+
dfs(1, 0);
50+
51+
visited = new boolean[N + 1];
52+
dfs(tmpNode, 0);
53+
54+
System.out.println(mx);
55+
}
56+
57+
private static class Node{
58+
int idx, w;
59+
60+
Node(int idx, int w) {
61+
this.idx = idx;
62+
this.w = w;
63+
}
64+
}
65+
}

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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_4781 {
7+
static int N;
8+
static int M;
9+
10+
private static int calMx(int[] cal, int[] price) { // cal: 가치, price: 무게
11+
int[] dp = new int[M+1]; // dp[i] = i원으로 얻을 수 있는 최대 칼로리
12+
for (int i = 1; i <= N; i++) {
13+
for (int j = price[i]; j <= M; j++) {
14+
dp[j] = Math.max(dp[j], dp[j - price[i]] + cal[i]); // 사탕 구매X, 사탕 추가했을 때
15+
}
16+
}
17+
return dp[M];
18+
}
19+
public static void main(String[] args) throws IOException {
20+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
21+
StringBuilder sb = new StringBuilder();
22+
23+
while (true){
24+
StringTokenizer st = new StringTokenizer(br.readLine());
25+
N = Integer.parseInt(st.nextToken()); // 사탕 수
26+
M = (int)(Double.parseDouble(st.nextToken())*100+0.5); // 돈
27+
28+
if (N==0 && M==0) break;
29+
30+
// 배낭 초기화
31+
int[] cal = new int[N + 1];
32+
int[] price = new int[N + 1];
33+
for (int i=1; i<N+1; i++){
34+
st = new StringTokenizer(br.readLine());
35+
cal[i] = Integer.parseInt(st.nextToken());
36+
price[i] = (int)(Double.parseDouble(st.nextToken())*100+0.5);
37+
}
38+
sb.append(calMx(cal, price)).append('\n');
39+
}
40+
System.out.println(sb);
41+
}
42+
}

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

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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_9205 {
9+
static Node start;
10+
static Node end;
11+
private static boolean canGo(int N, Node[] stores) {
12+
Queue<Node> que = new ArrayDeque<>();
13+
boolean[] visited = new boolean[N];
14+
15+
que.add(new Node(start.x, start.y));
16+
17+
while (!que.isEmpty()){
18+
Node cur = que.poll();
19+
20+
// 현재 위치에서 바로 페스티벌 도착할 수 있는지 확인
21+
if (calDist(cur.x, cur.y, end.x, end.y) <= 1000) return true;
22+
23+
// 아니라면 편의점 탐색
24+
for (int i = 0; i < N; i++) {
25+
if (visited[i])continue;
26+
Node nxt = stores[i];
27+
if (calDist(cur.x, cur.y, nxt.x, nxt.y) <= 1000){
28+
que.add(nxt);
29+
visited[i] = true;
30+
}
31+
}
32+
}
33+
return false;
34+
}
35+
36+
private static int calDist(int x1, int y1, int x2, int y2) {
37+
return Math.abs(x1 - x2) + Math.abs(y1 - y2);
38+
}
39+
public static void main(String[] args) throws IOException {
40+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
41+
StringTokenizer st;
42+
StringBuilder sb = new StringBuilder();
43+
int T = Integer.parseInt(br.readLine());
44+
45+
while (T-- > 0) {
46+
int N = Integer.parseInt(br.readLine()); // 편의점 개수
47+
Node[] stores = new Node[N];
48+
49+
for (int i = 0; i < N+2; i++) {
50+
st = new StringTokenizer(br.readLine());
51+
int x = Integer.parseInt(st.nextToken());
52+
int y = Integer.parseInt(st.nextToken());
53+
if (i==0) start = new Node(x, y);
54+
else if (i==N+1) end = new Node(x, y);
55+
else stores[i-1] = new Node(x, y);
56+
}
57+
58+
if (canGo(N, stores)) sb.append("happy").append('\n');
59+
else sb.append("sad").append('\n');
60+
}
61+
System.out.println(sb);
62+
}
63+
64+
static class Node{
65+
int x, y;
66+
67+
public Node(int x, int y) {
68+
this.x = x;
69+
this.y = y;
70+
}
71+
}
72+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class SB_놀이기구_탑승 {
5+
static int N;
6+
static int[][] board;
7+
static int[][] emptyCnt;
8+
static List<List<Integer>> friends = new ArrayList<>();
9+
static PriorityQueue<Node> pq = new PriorityQueue<Node>();
10+
static int[] dx = {-1, 1, 0, 0};
11+
static int[] dy = {0, 0, -1, 1};
12+
13+
private static int checkNxt(int x, int y, int idx) {
14+
int cnt = 0;
15+
for (int i = 0; i < 4; i++) {
16+
int nx = x + dx[i];
17+
int ny = y + dy[i];
18+
if (!isValid(nx, ny)) continue;
19+
if (friends.get(idx).contains(board[nx][ny])) cnt++;
20+
}
21+
return cnt;
22+
}
23+
private static void findSit(int idx) {
24+
for (int i = 0; i < N; i++) {
25+
for (int j = 0; j < N; j++) {
26+
if (board[i][j]==0) {
27+
int like = checkNxt(i, j, idx);
28+
pq.offer(new Node(i, j, like, emptyCnt[i][j]));
29+
}
30+
}
31+
}
32+
fixSit(idx);
33+
}
34+
35+
private static void fixSit(int idx) {
36+
if (!pq.isEmpty()) {
37+
Node cur = pq.poll();
38+
board[cur.r][cur.c] = idx;
39+
40+
// 빈자리 수 업데이트
41+
emptyCnt[cur.r][cur.c]--;
42+
for (int i = 0; i < 4; i++) {
43+
int nx = cur.r + dx[i];
44+
int ny = cur.c + dy[i];
45+
if (isValid(nx, ny)) {
46+
emptyCnt[nx][ny]--;
47+
}
48+
}
49+
}
50+
pq.clear();
51+
}
52+
53+
private static boolean isValid(int x, int y) {
54+
return 0<=x && x<N && 0<=y && y<N;
55+
}
56+
public static void main(String[] args) throws IOException {
57+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
58+
StringTokenizer st;
59+
N = Integer.parseInt(br.readLine());
60+
61+
board = new int[N][N];
62+
emptyCnt = new int[N][N];
63+
64+
// emptyCnt 초기화
65+
for (int i = 0; i < N; i++) {
66+
for (int j = 0; j < N; j++) {
67+
emptyCnt[i][j] = 4;
68+
if (i==0 || i==N-1) emptyCnt[i][j]--;
69+
if (j==0 || j==N-1) emptyCnt[i][j]--;
70+
if (emptyCnt[i][j]==4) pq.offer(new Node(i, j, 0, 4));
71+
}
72+
}
73+
// friends 리스트 초기화
74+
for (int i = 0; i <= N * N; i++) {
75+
friends.add(new ArrayList<>());
76+
}
77+
78+
for (int i = 0; i < N * N; i++) {
79+
st = new StringTokenizer(br.readLine());
80+
int me = Integer.parseInt(st.nextToken());
81+
for (int j = 0; j < 4; j++) {
82+
int f = Integer.parseInt(st.nextToken());
83+
friends.get(me).add(f);
84+
}
85+
if (i==0) fixSit(me); // 처음사람은 바로 자리 고정
86+
else findSit(me);
87+
}
88+
89+
// 점수 카운트
90+
int[] score = {0, 1, 10, 100, 1000};
91+
int ans = 0;
92+
for (int i = 0; i < N; i++) {
93+
for (int j = 0; j < N; j++) {
94+
int like = checkNxt(i, j, board[i][j]);
95+
ans += score[like];
96+
}
97+
}
98+
System.out.println(ans);
99+
}
100+
private static class Node implements Comparable<Node>{
101+
int r, c, like, empty;
102+
103+
Node(int r, int c, int like, int empty) {
104+
this.r = r;
105+
this.c = c;
106+
this.like = like;
107+
this.empty = empty;
108+
}
109+
110+
@Override
111+
public int compareTo(Node o) {
112+
int cmp = Integer.compare(o.like, this.like);
113+
if (cmp == 0) {
114+
int cmp2 = Integer.compare(o.empty, this.empty);
115+
if (cmp2 == 0) {
116+
int cmp3 = Integer.compare(this.r, o.r);
117+
if (cmp3==0){
118+
return Integer.compare(this.c, o.c);
119+
} return cmp3;
120+
}return cmp2;
121+
}
122+
return cmp;
123+
}
124+
}
125+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class SB_전자사전_만들기 {
5+
static int N, T;
6+
static String[] arr;
7+
static HashMap<String, Integer> map = new HashMap<>();
8+
9+
private static int findIdx(String target) {
10+
int left = 0;
11+
int right = N-1;
12+
13+
int idx = -1;
14+
while (left < right) {
15+
int mid = (left + right) / 2;
16+
if (arr[mid].compareTo(target) >= 0) { // mid값이 target값 뒤에 위치하거나 같음
17+
idx = mid;
18+
right = mid;
19+
} else{
20+
left = mid+1;
21+
}
22+
}
23+
return idx;
24+
}
25+
public static void main(String[] args) throws IOException {
26+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
27+
StringTokenizer st = new StringTokenizer(br.readLine());
28+
StringBuilder sb = new StringBuilder();
29+
30+
N = Integer.parseInt(st.nextToken());
31+
T = Integer.parseInt(st.nextToken());
32+
33+
arr = new String[N];
34+
for (int i = 0; i < N; i++) {
35+
arr[i] = br.readLine();
36+
map.put(arr[i], i + 1);
37+
}
38+
Arrays.sort(arr);
39+
40+
for (int i = 0; i < T; i++) {
41+
st = new StringTokenizer(br.readLine());
42+
int k = Integer.parseInt(st.nextToken());
43+
String s = st.nextToken();
44+
45+
int idx = findIdx(s);
46+
47+
if (idx != -1 && idx + k < N && arr[idx + k - 1].startsWith(s)) {
48+
sb.append(map.get(arr[idx + k - 1])).append('\n');
49+
} else sb.append(-1).append('\n');
50+
}
51+
52+
System.out.println(sb);
53+
}
54+
}

0 commit comments

Comments
(0)

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