diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index e69911a..ace0fe8 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,15 +1,75 @@
-- closed #000
-
-### Week 00 (00.00.00.)
-| Category | Title | Link |
-| :------: | :---: | :--: |
-| | | ๐ |
-| | | ๐ |
-| | | ๐ |
-| | | ๐ |
-| | | ๐ |
-
-
-```
-To. Reviewers
-```
+# ๐ ์ธํผ 15๋ฐ ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋ 5์ฃผ์ฐจ [์ด์คํฌ]
+
+## ๐ ๋ฌธ์ ํ์ด ๊ฐ์
+- ์ด๋ฒ PR์์๋ ๋ค์ 5๋ฌธ์ ์ ํ์ด๋ฅผ ํฌํจํฉ๋๋ค.
+- ๊ฐ ๋ฌธ์ ์ ๋ํ ํ์ด ๊ณผ์ ๊ณผ ์ ๊ทผ ๋ฐฉ์์ ์ค๋ช
ํฉ๋๋ค.
+---
+
+## โ
๋ฌธ์ ํด๊ฒฐ ์ฌ๋ถ
+
+ - [x] **๋ฌธ์ 1**
+ - [x] **๋ฌธ์ 2**
+ - [ ] **๋ฌธ์ 3**
+ - [x] **๋ฌธ์ 4**
+ - [ ] **๋ฌธ์ 5**
+
+---
+
+## ๐ก ํ์ด ๋ฐฉ๋ฒ
+### ๋ฌธ์ 1: ๋ฌธ์ ์ด๋ฆ
+(๋ฌธ์ ์ด๋ฆ์ ํ์ฌ ๋ฌธ์ ์ ๋ง๊ฒ ๋ฐ๊ฟ์ฃผ์ธ์! ๋ฐ๊พธ์๊ณ ์ด ๋ฌธ์ฅ์ ์ง์์ฃผ์ธ์.)
+
+**๋ฌธ์ ๋์ด๋**
+
+
+
+**๋ฌธ์ ์ ํ**
+
+
+
+ **์ ๊ทผ ๋ฐฉ์ ๋ฐ ํ์ด**
+
+
+---
+
+
+
+### ๋ฌธ์ 2: ๋ฌธ์ ์ด๋ฆ
+ **๋ฌธ์ ์ ํ**
+
+
+
+ **์ ๊ทผ ๋ฐฉ์ ๋ฐ ํ์ด**
+
+
+
+---
+### ๋ฌธ์ 3: ๋ฌธ์ ์ด๋ฆ
+ **๋ฌธ์ ์ ํ**
+
+
+
+
+
+
+ **์ ๊ทผ ๋ฐฉ์ ๋ฐ ํ์ด**
+
+
+---
+### ๋ฌธ์ 4: ๋ฌธ์ ์ด๋ฆ
+ **๋ฌธ์ ์ ํ**
+
+
+
+ **์ ๊ทผ ๋ฐฉ์ ๋ฐ ํ์ด**
+
+
+---
+### ๋ฌธ์ 5: ๋ฌธ์ ์ด๋ฆ
+ **๋ฌธ์ ์ ํ**
+
+
+
+ **์ ๊ทผ ๋ฐฉ์ ๋ฐ ํ์ด**
+
+
diff --git a/pullrequesttest.java b/pullrequesttest.java
new file mode 100644
index 0000000..e69de29
diff --git a/week10/BOJ11403.java b/week10/BOJ11403.java
new file mode 100644
index 0000000..0248661
--- /dev/null
+++ b/week10/BOJ11403.java
@@ -0,0 +1,51 @@
+package week10;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ11403 {
+
+ static int[][] arr;
+ static int n;
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+ n = Integer.parseInt(br.readLine());
+ arr = new int[n + 1][n + 1];
+ for (int i = 1; i <= n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 1; j <= n; j++) {
+ int a = Integer.parseInt(st.nextToken());
+ if (a == 1)
+ arr[i][j] = 1;
+ else
+ arr[i][j] = 101;
+ }
+ }
+
+ for (int k = 1; k <= n; k++) { // ํ๋ก์ด๋-์์
์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ชจ๋ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ผ๋ก์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++) {
+ arr[i][j] = Math.min(arr[i][j], arr[i][k] + arr[k][j]);
+ }
+ }
+ }
+
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++) {
+ if (arr[i][j] > 100 || arr[i][j] == 0) {
+ System.out.print("0 ");
+ } else {
+ System.out.print("1 ");
+ }
+ }
+ System.out.println();
+ }
+
+ }
+
+}
+
diff --git a/week10/BOJ1197.java b/week10/BOJ1197.java
new file mode 100644
index 0000000..2f7f427
--- /dev/null
+++ b/week10/BOJ1197.java
@@ -0,0 +1,87 @@
+package week10;
+
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.StringTokenizer;
+
+public class BOJ1197 {
+
+ static class Edge implements Comparable {
+ int from, to, weight;
+
+ public Edge(int from, int to, int weight) {
+ super();
+ this.from = from;
+ this.to = to;
+ this.weight = weight;
+ }
+
+ @Override
+ public int compareTo(Edge o) {
+ return Integer.compare(this.weight, o.weight);
+ }
+
+ }
+
+ static int V, E;
+ static int[] parents;
+ static Edge[] edgeList;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st= new StringTokenizer(br.readLine());
+
+ V = Integer.parseInt(st.nextToken());
+ E = Integer.parseInt(st.nextToken());
+ parents = new int[V + 1];
+ edgeList = new Edge[2*E];
+ for (int i = 1; i <= V; i++) {
+ parents[i] = i;
+ }
+
+ for (int i = 0; i < E; i++) {
+ st = new StringTokenizer(br.readLine());
+ int from = Integer.parseInt(st.nextToken());
+ int to = Integer.parseInt(st.nextToken());
+ int w = Integer.parseInt(st.nextToken());
+
+ edgeList[i] = new Edge(from, to, w); // ๋ฌดํฅ ๊ทธ๋ํ์ด๋ฏ๋ก from to ๋ฒ๊ฐ์ ์ ์ฅ
+ edgeList[E+i] = new Edge(to, from, w);
+ }
+
+ Arrays.sort(edgeList);
+ long result = 0, count = 0;
+
+ for (Edge edge : edgeList) { // edge ๋ง๋ค ํ์
+ if (union(edge.from, edge.to)) {
+ result += edge.weight;
+ if (++count == V - 1) {
+ break;
+ }
+ }
+ }
+
+ System.out.println(result);
+ }
+
+ static int find(int a) {
+ if (a == parents[a])
+ return a;
+ return parents[a] = find(parents[a]);
+ }
+
+ static boolean union(int a, int b) {
+ int aRoot = find(a);
+ int bRoot = find(b);
+
+ if (aRoot == bRoot)
+ return false;
+
+ parents[bRoot] = aRoot;
+ return true;
+ }
+
+}
+
diff --git a/week10/BOJ1238.java b/week10/BOJ1238.java
new file mode 100644
index 0000000..f94ea81
--- /dev/null
+++ b/week10/BOJ1238.java
@@ -0,0 +1,124 @@
+package week10;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.PriorityQueue;
+import java.util.StringTokenizer;
+
+class Node implements Comparable {
+ int index;
+ int weight;
+
+ public Node(int index, int cost) {
+ this.index = index;
+ this.weight = cost;
+ }
+
+ @Override
+ public int compareTo(Node o) {
+ return Integer.compare(this.weight, o.weight);
+ }
+}
+
+public class BOJ1238 {
+
+ static int n, m, x;
+ static ArrayList[] graph;
+ static ArrayList[] graph2;
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ x = Integer.parseInt(st.nextToken());
+
+ graph = new ArrayList[n + 1]; // ๋ชฉ์ ์ง ๋์ฐฉ์ฉ
+ graph2 = new ArrayList[n + 1]; // ๋ชฉ์ ์ง์์ ๊ท๊ฐ์ฉ
+
+ for (int i = 0; i <= n; i++) {
+ graph[i] = new ArrayList<>();
+ graph2[i] = new ArrayList<>();
+ }
+
+ for (int i = 0; i < m; i++) {
+ st = new StringTokenizer(br.readLine());
+ int u = Integer.parseInt(st.nextToken());
+ int v = Integer.parseInt(st.nextToken());
+ int w = Integer.parseInt(st.nextToken());
+
+ graph[v].add(new Node(u, w));
+ graph2[u].add(new Node(v, w));
+ }
+
+ int[] dist = Dijkstra(x);
+ int[] dist2 = Dijkstra2(x);
+ int max = 0;
+ for (int i = 1; i <= n; i++) {
+ max = Math.max(max, dist[i] + dist2[i]);
+ }
+ System.out.println(max);
+ }
+
+ public static int[] Dijkstra(int start) { // ๋ชฉ์ ์ง ๋์ฐฉ์ฉ
+ boolean[] check = new boolean[n + 1];
+ int[] dist = new int[n + 1];
+ int INF = Integer.MAX_VALUE;
+
+ Arrays.fill(dist, INF);
+ dist[start] = 0;
+
+ PriorityQueue pq = new PriorityQueue<>();
+ pq.offer(new Node(start, 0));
+
+ while (!pq.isEmpty()) {
+ int nowVertex = pq.poll().index;
+
+ if (check[nowVertex])
+ continue;
+ check[nowVertex] = true;
+
+ for (Node next : graph[nowVertex]) {
+ if (dist[next.index] > dist[nowVertex] + next.weight) {
+ dist[next.index] = dist[nowVertex] + next.weight;
+
+ pq.offer(new Node(next.index, dist[next.index]));
+ }
+ }
+ }
+
+ return dist;
+ }
+
+ public static int[] Dijkstra2(int start) { // ๋ชฉ์ ์ง ์ถ๋ฐ์ฉ
+ boolean[] check = new boolean[n + 1];
+ int[] dist = new int[n + 1];
+ int INF = Integer.MAX_VALUE;
+
+ Arrays.fill(dist, INF);
+ dist[start] = 0;
+
+ PriorityQueue pq = new PriorityQueue<>();
+ pq.offer(new Node(start, 0));
+
+ while (!pq.isEmpty()) {
+ int nowVertex = pq.poll().index;
+
+ if (check[nowVertex])
+ continue;
+ check[nowVertex] = true;
+
+ for (Node next : graph2[nowVertex]) {
+ if (dist[next.index] > dist[nowVertex] + next.weight) {
+ dist[next.index] = dist[nowVertex] + next.weight;
+
+ pq.offer(new Node(next.index, dist[next.index]));
+ }
+ }
+ }
+ return dist;
+ }
+}
diff --git a/week10/BOJ14940.java b/week10/BOJ14940.java
new file mode 100644
index 0000000..1521f28
--- /dev/null
+++ b/week10/BOJ14940.java
@@ -0,0 +1,78 @@
+package week10;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.StringTokenizer;
+
+public class BOJ14940 {
+
+ static int n, m, x, y;
+ static int[][] map;
+ static int[][] dist;
+ static boolean[][] visited;
+ static int[][] dir = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ map = new int[n][m];
+ dist = new int[n][m];
+ visited = new boolean[n][m];
+
+ // ๋งต ์
๋ ฅ ๋ฐ๊ธฐ
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < m; j++) {
+ int num = Integer.parseInt(st.nextToken());
+ if (num == 2) { // ๋ชฉํ ์ง์
+ y = i;
+ x = j;
+ map[i][j] = 0; // ๋ชฉํ ์ง์ ์ 0์ผ๋ก ์ด๊ธฐํ
+ } else {
+ map[i][j] = num;
+ }
+ dist[i][j] = -1; // ์ด๊ธฐํ: ๊ฑฐ๋ฆฌ ์ ๋ณด๋ -1๋ก ์ค์
+ if(map[i][j]==0)
+ dist[i][j]=0;
+ }
+ }
+
+ // BFS ์์
+ bfs(y, x);
+
+ // ๊ฒฐ๊ณผ ์ถ๋ ฅ
+ for (int[] row : dist) {
+ for (int cell : row) {
+ System.out.print(cell + " ");
+ }
+ System.out.println();
+ }
+ }
+
+ public static void bfs(int startY, int startX) {
+ Queue queue = new LinkedList<>();
+ queue.offer(new int[]{startY, startX});
+ dist[startY][startX] = 0; // ๋ชฉํ ์ง์ ์ ๊ฑฐ๋ฆฌ๋ 0
+
+ while (!queue.isEmpty()) {
+ int[] current = queue.poll();
+ int y = current[0];
+ int x = current[1];
+
+ for (int i = 0; i < 4; i++) {
+ int dy = y + dir[i][0];
+ int dx = x + dir[i][1];
+
+ if (dy >= 0 && dy < n && dx >= 0 && dx < m && map[dy][dx] == 1 && dist[dy][dx] == -1) {
+ dist[dy][dx] = dist[y][x] + 1;
+ queue.offer(new int[]{dy, dx});
+ }
+ }
+ }
+ }
+}
diff --git a/week10/BOJ16928.java b/week10/BOJ16928.java
new file mode 100644
index 0000000..fe06f7c
--- /dev/null
+++ b/week10/BOJ16928.java
@@ -0,0 +1,77 @@
+package week10;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.StringTokenizer;
+
+public class BOJ16928 {
+
+ static int[] arr = new int[101]; // ์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
+ static boolean[] visited = new boolean[101]; // ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ๋ฐฐ์ด
+ static int n, m;
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+
+ // ์ฌ๋ค๋ฆฌ์ ๋ฑ์ ์ ๋ณด ์
๋ ฅ
+ for (int i = 0; i < n + m; i++) {
+ st = new StringTokenizer(br.readLine());
+ int from = Integer.parseInt(st.nextToken());
+ int to = Integer.parseInt(st.nextToken());
+ arr[from] = to; // ์ฌ๋ค๋ฆฌ ๋๋ ๋ฑ์ ์ด๋ ์ ๋ณด๋ฅผ ์ ์ฅ
+ }
+
+ // BFS ์ํ
+ System.out.println(bfs(1)); // ์์ ์ง์ ์ 1
+ }
+
+ static int bfs(int start) {
+ Queue queue = new ArrayDeque<>();
+ queue.add(start);
+ visited[start] = true; // ์์ ์์น ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
+ int count = 0; // ์ด๋ ํ์ ์นด์ดํธ
+
+ while (!queue.isEmpty()) {
+ int size = queue.size(); // ํ์ฌ ๋ ๋ฒจ์ ํฌ๊ธฐ (ํ ๋ฒ์ ์ฃผ์ฌ์ ๋์ง๊ธฐ ๊ฒฐ๊ณผ)
+ count++;
+
+ // ํ์ฌ ๋ ๋ฒจ์ ์๋ ๋ชจ๋ ๋
ธ๋ ์ฒ๋ฆฌ
+ for (int i = 0; i < size; i++) {
+ int current = queue.poll();
+
+ // ์ฃผ์ฌ์ ๋์ง๊ธฐ ๊ฒฐ๊ณผ (1๋ถํฐ 6๊น์ง)
+ for (int dice = 1; dice <= 6; dice++) {
+ int next = current + dice;
+
+ // ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ๋ ๋ฌด์
+ if (next > 100) continue;
+
+ // ์ฌ๋ค๋ฆฌ๋ ๋ฑ์ ์ํ ์ด๋ ์ฒ๋ฆฌ
+ if (arr[next] != 0) {
+ next = arr[next];
+ }
+
+ // ๋ชฉํ ์ง์ ์ธ 100์ ๋๋ฌํ๋ฉด ์ด๋ ํ์ ๋ฆฌํด
+ if (next == 100) {
+ return count;
+ }
+
+ // ๋ฐฉ๋ฌธํ์ง ์์ ์์น๋ผ๋ฉด ํ์ ์ถ๊ฐ
+ if (!visited[next]) {
+ visited[next] = true;
+ queue.add(next);
+ }
+ }
+ }
+ }
+
+ return -1; // 100์ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก ์ฌ์ค์ ์ด ๋ถ๋ถ์ ํ์ ์์
+ }
+}
+
diff --git a/week11/BOJ11727.java b/week11/BOJ11727.java
new file mode 100644
index 0000000..e4d991d
--- /dev/null
+++ b/week11/BOJ11727.java
@@ -0,0 +1,25 @@
+package week11;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class BOJ11727 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ int n = Integer.parseInt(br.readLine());
+
+ long[] arr = new long[1001];
+
+ arr[1] = 1; // ์ฒซ๋ฒ์งธ ๊ฒฝ์ฐ
+ arr[2] = 3; // ๋๋ฒ์งธ ๊ฒฝ์ฐ
+
+ for (int i = 3; i <= n; i++) {
+ arr[i] = (arr[i - 1] + 2 * arr[i - 2]) % 10007; // ๊ฐ์ด ํฌ๊ธฐ ๋๋ฌธ์ ๋ชจ๋๋ฌ ์ฐ์ฐ
+ }
+
+ System.out.println(arr[n]);
+ }
+
+}
diff --git a/week11/BOJ1261.java b/week11/BOJ1261.java
new file mode 100644
index 0000000..4aa9904
--- /dev/null
+++ b/week11/BOJ1261.java
@@ -0,0 +1,80 @@
+package week11;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.PriorityQueue;
+import java.util.StringTokenizer;
+
+public class BOJ1261 {
+
+ static class Node implements Comparable {
+ int y, x, weight;
+
+ public Node(int y, int x, int weight) {
+ super();
+ this.y = y;
+ this.x = x;
+ this.weight = weight;
+ }
+
+ @Override
+ public int compareTo(BOJ1261.Node o) {
+ return this.weight - o.weight;
+ }
+
+ }
+
+ static int[][] map, cmap;
+ static boolean[][] visited;
+ static int n, m;
+ static int[][] dir = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ m = Integer.parseInt(st.nextToken());
+ n = Integer.parseInt(st.nextToken());
+
+ map = new int[n][m]; // ์ง๋
+ cmap = new int[n][m]; // ๊ฐ ์ ์ฅํ ์ง๋
+ visited = new boolean[n][m];
+
+ for (int i = 0; i < n; i++) {
+ String str = br.readLine();
+ for (int j = 0; j < m; j++) {
+ map[i][j] = str.charAt(j) - '0'; // string์ผ๋ก ๋ฐ์์ผํด์ ์ ์ํ
+ cmap[i][j] = Integer.MAX_VALUE/2;
+ }
+ }
+
+ dijkstra();
+
+ System.out.println(cmap[n-1][m-1]);
+ }
+
+ static void dijkstra() { // ์ฐ์ ์์ํ ํ์ฉํ ๋ค์ต์คํธ๋ผ ์ฌ์ฉ
+ cmap[0][0] = map[0][0];
+ PriorityQueue pq = new PriorityQueue<>();
+ pq.add(new Node(0, 0, cmap[0][0]));
+ while (!pq.isEmpty()) {
+ Node cur = pq.poll();
+ if (visited[cur.y][cur.x])
+ continue;
+ visited[cur.y][cur.x] = true;
+
+ for (int i = 0; i < 4; i++) {
+ int dy = cur.y + dir[i][0];
+ int dx = cur.x + dir[i][1];
+
+ if (dy >= 0 && dy < n && dx >= 0 && dx < m) { // 4๋ฐฉํ์ ํ๋ฉด์ ๊ฐ ๊ฐฑ์
+ if (cmap[dy][dx] > cmap[cur.y][cur.x] + map[dy][dx]) {
+ cmap[dy][dx] = cmap[cur.y][cur.x] + map[dy][dx];
+ pq.add(new Node(dy, dx, cmap[dy][dx]));
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/week11/BOJ12865.java b/week11/BOJ12865.java
new file mode 100644
index 0000000..31a2230
--- /dev/null
+++ b/week11/BOJ12865.java
@@ -0,0 +1,41 @@
+package week11;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ12865 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int N = Integer.parseInt(st.nextToken()); // ๋ฌผํ๊ฐ์
+ int K = Integer.parseInt(st.nextToken()); // ์ต๋๋ฌด๊ฒ
+
+ int[] weight = new int[N];
+ int[] value = new int[N];
+
+ for (int i = 0; i < N; i++) { // ์
๋ ฅ๋ถ
+ st = new StringTokenizer(br.readLine());
+ weight[i] = Integer.parseInt(st.nextToken());
+ value[i] = Integer.parseInt(st.nextToken());
+ }
+
+ //dp[i][w] = i๋ฒ์งธ ๋ฌผ๊ฑด๊น์ง ๊ณ ๋ คํ์ ๋ w๋ฌด๊ฒ์์์ ๊ฐ์น
+ int[][] dp = new int[N + 1][K + 1];
+
+ for (int i = 1; i <= N; i++) {
+ for (int w = 0; w <= K; w++) {
+ if (weight[i - 1] > w) { // ๋ฌผํ์ด ์ ํ๋ณด๋ค ๋ฌด๊ฑฐ์ด ๊ฒฝ์ฐ
+ dp[i][w] = dp[i - 1][w];
+ } else { // ์๋ ๊ฒฝ์ฐ ๋ฃ๊ฑฐ๋ ์๋ฃ๊ฑฐ๋ ํด์ ๊ฐ ๊ณ์ฐ
+ dp[i][w] = Math.max(dp[i - 1][w], dp[i - 1][w - weight[i - 1]] + value[i - 1]);
+ }
+ }
+ }
+
+ System.out.println(dp[N][K]);
+ }
+
+}
diff --git a/week11/BOJ2151.java b/week11/BOJ2151.java
new file mode 100644
index 0000000..e24061e
--- /dev/null
+++ b/week11/BOJ2151.java
@@ -0,0 +1,5 @@
+package week11;
+
+public class BOJ2151 {
+
+}
diff --git a/week11/BOJ9251.java b/week11/BOJ9251.java
new file mode 100644
index 0000000..0d88e33
--- /dev/null
+++ b/week11/BOJ9251.java
@@ -0,0 +1,36 @@
+package week11;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class BOJ9251 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ String s1 = br.readLine();
+ String s2 = br.readLine();
+
+ System.out.println(lcs(s1,s2));
+ }
+
+ public static int lcs(String A, String B) {
+ int n = A.length();
+ int m = B.length();
+
+ int[][] dp = new int[n + 1][m + 1]; // ๊ฐ ๋ฌธ์์ด ๊ธธ์ด๋ก 2์ฐจ์ ๋ฐฐ์ด ๋ง๋ฌ
+
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= m; j++) { // ์ ๋ถ ํ์ํ๋ฉด์
+ if (A.charAt(i - 1) == B.charAt(j - 1)) { // ๊ฐ์ ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด
+ dp[i][j] = dp[i - 1][j - 1] + 1; // ๋๊ฐ์ ์์ ๊ฒฝ์ฐ์์ + 1
+ } else { // ๋ฌธ์๊ฐ ๊ฐ์ง ์์ ๊ฒฝ์ฐ
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); // ์ด์ ๊ฒ๋ค ์ค ํฐ๊ฒ ์ ํ
+ }
+ }
+ }
+
+ return dp[n][m];
+ }
+
+}
diff --git a/week12/BOJ14938.java b/week12/BOJ14938.java
new file mode 100644
index 0000000..0ac1a79
--- /dev/null
+++ b/week12/BOJ14938.java
@@ -0,0 +1,101 @@
+package week12;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+public class BOJ14938 {
+
+ public static class Node implements Comparable { // node ํด๋์ค
+ int idx, weight;
+
+ public Node(int idx, int weight) {
+ super();
+ this.idx = idx;
+ this.weight = weight;
+ }
+
+ @Override
+ public int compareTo(BOJ14938.Node o) {
+ return this.weight - o.weight;
+ }
+
+ }
+
+ static int n, m, r, res;
+ static ArrayList[] graph;
+ static int[] item;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ r = Integer.parseInt(st.nextToken());
+
+ graph = new ArrayList[n + 1];
+
+ for (int i = 0; i <= n; i++) {
+ graph[i] = new ArrayList<>();
+ }
+
+ item = new int[n + 1];
+ st = new StringTokenizer(br.readLine());
+ for (int i = 1; i <= n; i++) {
+ item[i] = Integer.parseInt(st.nextToken());
+ }
+
+ for (int i = 0; i < r; i++) {
+ st = new StringTokenizer(br.readLine());
+ int from = Integer.parseInt(st.nextToken());
+ int to = Integer.parseInt(st.nextToken());
+ int w = Integer.parseInt(st.nextToken());
+
+ graph[from].add(new Node(to, w)); // ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ด๋ฏ๋ก ์์ชฝ์ผ๋ก ๋ค ์ฌ์ฉ
+ graph[to].add(new Node(from, w));
+ }
+
+ for(int i=1;i<=n;i++) {
+ dijkstra(i);
+ }
+
+ System.out.println(res);
+
+ }
+
+ static void dijkstra(int start) { // pq ๋ฅผ ์ฌ์ฉํ ๋ค์ต์คํธ๋ผ
+ Queue pq = new PriorityQueue<>();
+ boolean[] visited = new boolean[n + 1];
+ int[] dist = new int[n + 1];
+ Arrays.fill(dist, 20);
+ dist[start] = 0;
+ pq.offer(new Node(start, 0));
+ int tmp=0;
+
+ while (!pq.isEmpty()) {
+ int curidx = pq.poll().idx;
+ if (visited[curidx])
+ continue;
+
+ visited[curidx] = true;
+
+ for (Node n : graph[curidx]) {
+ if (dist[n.idx] > dist[curidx] + n.weight) {
+ dist[n.idx] = dist[curidx] + n.weight;
+
+ pq.offer(new Node(n.idx, dist[n.idx]));
+ }
+ }
+ }
+
+ for(int i=1;i<=n;i++) {
+ if(dist[i]<=m) {
+ tmp+=item[i];
+ }
+ }
+
+ res = Math.max(res, tmp);
+ }
+}
+
diff --git a/week12/BOJ16236.java b/week12/BOJ16236.java
new file mode 100644
index 0000000..95cac96
--- /dev/null
+++ b/week12/BOJ16236.java
@@ -0,0 +1,111 @@
+package week12;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+public class BOJ16236 {
+
+ public static class Shark { // ์์ด ์ ๋ณด ํด๋์ค
+ int y, x, size, eat;
+
+ public Shark(int y, int x, int size, int eat) {
+ this.y = y;
+ this.x = x;
+ this.size = size;
+ this.eat = eat;
+ }
+ }
+
+ static int[][] map; // ๋งต
+ static int n, res;
+ static boolean[][] visited; // ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
+ static int[][] dir = { { -1, 0 }, { 0, -1 }, { 0, 1 }, { 1, 0 } };
+ static Shark s;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+
+ n = Integer.parseInt(br.readLine());
+ map = new int[n][n];
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < n; j++) {
+ map[i][j] = Integer.parseInt(st.nextToken());
+ if (map[i][j] == 9) { // ์์ด ์ด๊ธฐ์์น ์ฒ๋ฆฌ
+ s = new Shark(i, j, 2, 0);
+ map[i][j] = 0;
+ }
+ }
+ }
+
+ while (true) { // ์์ด๊ฐ ๋์ด์ ๋จน์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์์ ๋ ๊น์ง ๋ฐ๋ณต ์ํ
+ int move = bfs();
+ if (move == -1) break; // ๋จน์ง ๋ชปํ ๊ฒฝ์ฐ
+
+ res += move;
+
+ if (s.size == s.eat) { // ์์ด๊ฐ ์ถฉ๋ถํ ๋จน์ผ๋ฉด ํฌ๊ธฐ ์ฆ๊ฐ
+ s.size++;
+ s.eat = 0;
+ }
+ }
+
+ System.out.println(res);
+ }
+
+ public static int bfs() {
+ Queue list = new ArrayDeque<>();
+ visited = new boolean[n][n];
+ list.add(new int[] { s.y, s.x });
+ visited[s.y][s.x] = true;
+
+ List targets = new ArrayList<>();
+ int step = 0;
+
+ while (!list.isEmpty()) {
+ int size = list.size();
+ step++;
+
+ for (int i = 0; i < size; i++) {
+ int[] cur = list.poll();
+
+ for (int d = 0; d < 4; d++) {
+ int dy = cur[0] + dir[d][0];
+ int dx = cur[1] + dir[d][1];
+
+ if (dy >= 0 && dy < n && dx >= 0 && dx < n && !visited[dy][dx]) {
+ if (map[dy][dx] <= s.size) { // ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด๋
+ visited[dy][dx] = true;
+
+ if (map[dy][dx] != 0 && map[dy][dx] < s.size) {
+ targets.add(new int[] { dy, dx }); // ๋ฌผ๊ณ ๊ธฐ์ธ ๊ฒฝ์ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ ํ๋ณด ์ฒ๋ฆฌ
+ }
+
+ list.add(new int[] { dy, dx });
+ }
+ }
+ }
+ }
+
+ if (!targets.isEmpty()) { // ๋จน์ด ์ฐ์ ์์์ ๋ฐ๋ผ ๋ฌผ๊ณ ๊ธฐ ๋จน๋ ์นธ ๊ตฌํ๊ธฐ
+ targets.sort((a, b) -> {
+ if (a[0] != b[0]) return a[0] - b[0]; // ์์ชฝ
+ return a[1] - b[1]; // ์ผ์ชฝ
+ });
+
+ int[] target = targets.get(0);
+ s.y = target[0];
+ s.x = target[1];
+ s.eat++; // ๋จน์ ํ์ ์ฆ๊ฐ
+ map[s.y][s.x] = 0; // ๋จน์ ๋ฌผ๊ณ ๊ธฐ ์นธ 0์ผ๋ก ์์
+ return step;
+ }
+ }
+
+ return -1;
+ }
+}
+
diff --git a/week12/BOJ17086.java b/week12/BOJ17086.java
new file mode 100644
index 0000000..9930475
--- /dev/null
+++ b/week12/BOJ17086.java
@@ -0,0 +1,74 @@
+package week12;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.StringTokenizer;
+
+public class BOJ17086 {
+
+ static int[][] map;
+ static int n, m, dist;
+ static boolean[][] visited;
+ static int[][] dir = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 }, { -1, -1 }, { -1, 1 }, { 1, -1 }, { 1, 1 } };
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+
+ map = new int[n][m];
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < m; j++) {
+ map[i][j] = Integer.parseInt(st.nextToken());
+ }
+ }
+
+ dist = Integer.MIN_VALUE;
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < m; j++) {
+ if (map[i][j] == 0) { // ์์ด๊ฐ ์๋ ๊ณณ ๋ง๋ค bfs ์ํํ์ฌ ์์ ๊ฑฐ๋ฆฌ ๊ตฌํจ
+ bfs(new int[] { i, j });
+ }
+ }
+ }
+
+ System.out.println(dist);
+ }
+
+ public static void bfs(int[] start) {
+ Queue list = new ArrayDeque<>();
+ visited = new boolean[n][m];
+ visited[start[0]][start[1]] = true;
+ list.add(start);
+ int step = 1; // step ๋ณ bfs ์ํ์ผ๋ก ์์ด๋ฅผ ๋ง๋๋ฉด step์ ์์ ๊ฑฐ๋ฆฌ๋ก ๊ฐฑ์
+
+ while (!list.isEmpty()) {
+ int size = list.size();
+ for (int s = 0; s < size; s++) {
+ int[] cur = list.poll();
+ for (int i = 0; i < 8; i++) {
+ int dy = cur[0] + dir[i][0];
+ int dx = cur[1] + dir[i][1];
+
+ if (dy >= 0 && dy < n && dx >= 0 && dx < m) {
+ if (map[dy][dx] == 1) {
+ dist = Math.max(dist, step);
+ return;
+ } else if (!visited[dy][dx]) {
+ visited[dy][dx] = true;
+ list.add(new int[] { dy, dx });
+ }
+ }
+ }
+ }
+ step++;
+ }
+ }
+}
+
diff --git a/week12/BOJ2293.java b/week12/BOJ2293.java
new file mode 100644
index 0000000..a4fc255
--- /dev/null
+++ b/week12/BOJ2293.java
@@ -0,0 +1,35 @@
+package week12;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+public class BOJ2293 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int n = Integer.parseInt(st.nextToken());
+ int max = Integer.parseInt(st.nextToken());
+ int[] val = new int[max + 1]; // 1์๋ถํฐ ์ธ๊ธฐ ์ํด์ +1๋ก ๋ฐฐ์ด
+ int[] coin = new int[n];
+
+ for (int i = 0; i < n; i++) { // ๋์ ๊ฐ๊ฒฉ
+ coin[i] = Integer.parseInt(br.readLine());
+ }
+
+
+ val[0] = 1;
+
+ for (int i = 0; i < n; i++) {
+ for (int j = coin[i]; j <= max; j++) { // ๊ฐ์ฅ ๋ฎ์ ๊ฐ๊ฒฉ๋ถํฐ
+ val[j] += val[j - coin[i]]; //dp ๊ณ์ฐ
+ }
+ }
+
+ System.out.println(val[max]);
+
+ }
+}
+
diff --git a/week12/BOJ9461.java b/week12/BOJ9461.java
new file mode 100644
index 0000000..98e58db
--- /dev/null
+++ b/week12/BOJ9461.java
@@ -0,0 +1,23 @@
+package week12;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class BOJ9461 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ int T = Integer.parseInt(br.readLine());
+ long[] pado = new long[101];
+ pado[1] = pado[2] = pado[3] = 1;
+ for (int i = 4; i <= 100; i++) {
+ pado[i] = pado[i - 2] + pado[i - 3];
+ }
+
+ for (int t = 0; t < T; t++) {
+ System.out.println(pado[Integer.parseInt(br.readLine())]);
+ }
+ }
+}
+
diff --git a/week13/BOJ13549.java b/week13/BOJ13549.java
new file mode 100644
index 0000000..9b22c90
--- /dev/null
+++ b/week13/BOJ13549.java
@@ -0,0 +1,66 @@
+package week13;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ13549 {
+
+ static class Node implements Comparable {
+ int x, time;
+
+ public Node(int x, int time) {
+ super();
+ this.x = x;
+ this.time = time;
+ }
+
+ @Override
+ public int compareTo(BOJ13549.Node o) {
+ return this.time - o.time;
+ }
+
+ }
+
+ static int n, k;
+ static Queue list = new PriorityQueue<>();
+ static boolean[] visited;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ k = Integer.parseInt(st.nextToken());
+ visited = new boolean[1000001];
+ list.add(new Node(n, 0));
+
+ bfs();
+ }
+
+ static void bfs() { // bfs์ฒ๋ผ ํ์ํ๋ฉด์ ์ฐพ๊ธฐ
+ while (!list.isEmpty()) {
+ Node cur = list.poll();
+ if (visited[cur.x])
+ continue;
+ visited[cur.x] = true;
+
+ if (cur.x == k) {
+ System.out.println(cur.time);
+ return;
+ }
+ int dx = cur.x * 2;
+ if (dx <= 100000 && !visited[dx]) {
+ list.add(new Node(dx, cur.time));
+ }
+ dx = cur.x - 1;
+ if (dx >= 0 && !visited[dx]) {
+ list.add(new Node(dx, cur.time + 1));
+ }
+ dx = cur.x + 1;
+ if (dx <= 100000 && !visited[dx]) {
+ list.add(new Node(dx, cur.time + 1));
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/week13/BOJ1629.java b/week13/BOJ1629.java
new file mode 100644
index 0000000..0e119bb
--- /dev/null
+++ b/week13/BOJ1629.java
@@ -0,0 +1,31 @@
+package week13;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ1629 {
+
+ static int MOD;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int a = Integer.parseInt(st.nextToken());
+ int b = Integer.parseInt(st.nextToken());
+ MOD = Integer.parseInt(st.nextToken());
+
+ System.out.println(pow(a, b));
+
+ }
+
+ static long pow(long a, int b) { // ํฐ ์ ์ ๊ณฑ ๋ฐฉ์ ํ์ฉ
+ if (b == 0)
+ return 1;
+ long half = pow(a, b / 2);
+ long result = (half * half) % MOD;
+ if (b % 2 == 1)
+ result = (result * a) % MOD;
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/week13/BOJ1918.java b/week13/BOJ1918.java
new file mode 100644
index 0000000..8ea794e
--- /dev/null
+++ b/week13/BOJ1918.java
@@ -0,0 +1,61 @@
+package week13;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ1918 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+
+ String str = br.readLine();
+
+ System.out.println(topostfix(str));
+ }
+
+ static String topostfix(String str) {
+ StringBuilder sb = new StringBuilder();
+ Stack stack = new Stack<>();
+
+ for (char c : str.toCharArray()) {
+ if (isAlphabet(c)) { // ์ํ๋ฒณ์ด๋ฉด ๋ฐ๋ก ์
๋ ฅ
+ sb.append(c);
+ } else if (c == '(') { // ์ฌ๋ ๊ดํธ ๋์ค๋ฉด ์คํ์ ์ ์ฅ
+ stack.push(c);
+ } else if (c == ')') { // ๋ซ๋ ๊ดํธ ๋์ค๋ฉด
+ while (!stack.isEmpty() && stack.peek() != '(') { // ์ฌ๋ ๊ดํธ ์ ๊น์ง
+ sb.append(stack.pop()); // ์คํ์์ ๋นผ์ ์
๋ ฅ
+ }
+ stack.pop();
+ } else if (isOperater(c)) { // ์ฐ์ฐ์์ธ ๊ฒฝ์ฐ
+ while (!stack.isEmpty() && priority(stack.peek()) >= priority(c)) {
+ sb.append(stack.pop()); // ์คํ์ ๋ค์ด์๋ ์ฐ์ฐ์๊ฐ ํ์ฌ ์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฉด ์คํ์์ ๊บผ๋ด์ ์
๋ ฅ
+ }
+ stack.push(c); // ์ฐ์ฐ์๋ฅผ ์คํ์ ์ ์ฅ
+ }
+ }
+
+ while (!stack.isEmpty()) {
+ sb.append(stack.pop()); // ๋๋จธ์ง ์ฐ์ฐ์ ํ์ํ๊ธฐ๋ก ์
๋ ฅ
+ }
+
+ return sb.toString();
+ }
+
+ static boolean isAlphabet(char c) { // ์ํ๋ฒณ ๋๋ฌธ์๊ฐ ์ซ์ ๋์ฉ์ด๋ฏ๋ก ํ๋จ
+ return c - 'A' >= 0 && c - 'A' <= 26;
+ }
+
+ static boolean isOperater(char c) { // ์ฐ์ฐ์์ธ์ง ํ๋จ
+ return c == '*' || c == '/' || c == '+' || c == '-';
+ }
+
+ static int priority(char c) { // ์ฐ์ฐ์ ์ฐ์ ์์ ํ๋จ
+ if (c == '+' || c == '-')
+ return 1;
+ if (c == '/' || c == '*')
+ return 2;
+ return 0;
+ }
+}
diff --git a/week13/BOJ2206.java b/week13/BOJ2206.java
new file mode 100644
index 0000000..d9bc73d
--- /dev/null
+++ b/week13/BOJ2206.java
@@ -0,0 +1,78 @@
+package week13;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ2206 {
+
+ static int n, m;
+ static int[][] map;
+ static boolean[][][] visited;
+ static int[][] dir = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
+
+ static class Cell {
+ int y, x, wall;
+
+ public Cell(int y, int x, int wall) {
+ super();
+ this.y = y;
+ this.x = x;
+ this.wall = wall;
+ }
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+
+ map = new int[n][m];
+ visited = new boolean[n][m][2];
+
+ for (int i = 0; i < n; i++) {
+ String str = br.readLine();
+ for (int j = 0; j < m; j++) {
+ map[i][j] = str.charAt(j) - '0';
+ }
+ }
+
+ bfs();
+ }
+
+ static void bfs() {
+ Queue list = new ArrayDeque<>();
+ list.add(new Cell(0, 0, 0));
+ visited[0][0][0] = true;
+ int step = 1;
+
+ while (!list.isEmpty()) {
+ int size = list.size();
+ for (int s = 0; s < size; s++) {
+ Cell cur = list.poll();
+ if (cur.y == n - 1 && cur.x == m - 1) {
+ System.out.println(step);
+ return;
+ }
+ for (int d = 0; d < 4; d++) {
+ int dy = cur.y + dir[d][0];
+ int dx = cur.x + dir[d][1];
+ if (dy >= 0 && dy < n && dx >= 0 && dx < m) {
+ if (map[dy][dx] == 1 && cur.wall == 0 && !visited[dy][dx][1]) {
+ visited[dy][dx][1] = true;
+ list.add(new Cell(dy, dx, 1));
+ } else if (map[dy][dx] == 0 && !visited[dy][dx][cur.wall]) {
+ visited[dy][dx][cur.wall] = true;
+ list.add(new Cell(dy, dx, cur.wall));
+ }
+ }
+ }
+ }
+ step++;
+ }
+ System.out.println("-1");
+ }
+
+}
diff --git a/week13/BOJ9465.java b/week13/BOJ9465.java
new file mode 100644
index 0000000..6eedc97
--- /dev/null
+++ b/week13/BOJ9465.java
@@ -0,0 +1,55 @@
+package week13;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ9465 {
+
+ static int n;
+ static int[][] sticker;
+ static int[][] dp;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+ StringBuilder sb = new StringBuilder();
+ int T = Integer.parseInt(br.readLine());
+
+ for (int t = 1; t <= T; t++) {
+ n = Integer.parseInt(br.readLine());
+ sticker = new int[2][n];
+ dp = new int[2][n];
+
+ for (int i = 0; i < 2; i++) { // ์คํฐ์ปค์
๋ ฅ
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < n; j++) {
+ sticker[i][j] = Integer.parseInt(st.nextToken());
+ }
+ }
+
+ if (n == 1) { // 1์นธ์ง๋ฆฌ ์ผ ๊ฒฝ์ฐ
+ sb.append(Math.max(sticker[0][0], sticker[1][0]) + "\n");
+ continue;
+ }
+
+ else { // 2์นธ ์ด์์ธ ๊ฒฝ์ฐ
+ dp[0][0] = sticker[0][0];
+ dp[1][0] = sticker[1][0];
+
+ dp[0][1] = dp[1][0] + sticker[0][1];
+ dp[1][1] = dp[0][0] + sticker[1][1];
+
+ for (int i = 2; i < n; i++) { // dp ๊ณ์ฐ
+ for (int j = 0; j < 2; j++) {
+ dp[j][i] += Math.max(dp[(j * -1) + 1][i - 1], dp[(j * -1) + 1][i - 2]);
+ dp[j][i] += sticker[j][i];
+ }
+ }
+
+ sb.append(Math.max(dp[0][n - 1], dp[1][n - 1]) + "\n");
+ }
+ }
+
+ System.out.println(sb);
+ }
+}
diff --git a/week14/BOJ14503.java b/week14/BOJ14503.java
new file mode 100644
index 0000000..e17a24e
--- /dev/null
+++ b/week14/BOJ14503.java
@@ -0,0 +1,97 @@
+package week14;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ14503 {
+
+ static int n, m, res;
+ static int[][] map;
+ static int[][] dir = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
+ static int[] turn = { 3, 0, 1, 2 }; // ์ผ์ชฝ์ผ๋ก 90๋ ๋๋ ๊ฒฝ์ฐ
+ static int[] round = { 2, 3, 0, 1 }; // ๋ค๋ก ๊ฐ๋ ๊ฒฝ์ฐ
+
+ static class cleaner { // ์ฒญ์๊ธฐ ํด๋์ค
+ int y, x, dir;
+
+ public cleaner(int y, int x, int dir) {
+ super();
+ this.y = y;
+ this.x = x;
+ this.dir = dir;
+ }
+
+ }
+
+ static cleaner c;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+
+ map = new int[n][m];
+
+ st = new StringTokenizer(br.readLine());
+ int y = Integer.parseInt(st.nextToken());
+ int x = Integer.parseInt(st.nextToken());
+ int d = Integer.parseInt(st.nextToken());
+ c = new cleaner(y, x, d);
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < m; j++) {
+ map[i][j] = Integer.parseInt(st.nextToken());
+ }
+ }
+
+ run();
+ System.out.println(res);
+ }
+
+ static void run() {
+ while (true) {
+ if (map[c.y][c.x] == 0) {
+ map[c.y][c.x] = 2;
+ res++;
+ }
+
+ boolean chk = false;
+
+ for (int d = 0; d < 4; d++) { // 4๋ฐฉํฅ ์ค ์ฒญ์ํ ๊ณณ ์๋์ง ํ์
+ int dy = c.y + dir[d][0];
+ int dx = c.x + dir[d][1];
+ if (dy < 0 || dy >= n || dx < 0 || dx >= m)
+ continue;
+ if (map[dy][dx] == 0) {
+ chk = true;
+ break;
+ }
+ }
+ if (chk) { // ์ฒญ์ํ ๊ณณ์ด ์๋ค๋ฉด ์ผ์ชฝ์ผ๋ก 90๋ ๋์์ ํ์ธ
+ c.dir = turn[c.dir];
+ int dy = c.y + dir[c.dir][0];
+ int dx = c.x + dir[c.dir][1];
+ if (dy < 0 || dy >= n || dx < 0 || dx >= m)
+ continue;
+ if (map[dy][dx] == 0) {
+ c.y = dy;
+ c.x = dx;
+ }
+ } else { // ์ฒญ์ํ ๊ณณ์ด ์๋ค๋ฉด ๋ค๋ก ํ์นธ ์ด๋
+ int dy = c.y + dir[round[c.dir]][0];
+ int dx = c.x + dir[round[c.dir]][1];
+ if (dy < 0 || dy >= n || dx < 0 || dx >= m || map[dy][dx] == 1)
+ return;
+ else {
+ c.y = dy;
+ c.x = dx;
+ }
+ }
+ }
+ }
+
+}
+
diff --git a/week14/BOJ1699.java b/week14/BOJ1699.java
new file mode 100644
index 0000000..1238480
--- /dev/null
+++ b/week14/BOJ1699.java
@@ -0,0 +1,32 @@
+package week14;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ1699 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int n = Integer.parseInt(st.nextToken());
+
+ int[] dp = new int[100001]; // ์ต๋ 10๋ง๊น์ง ๊ณ ๋ คํจ
+ dp[0] = 0;
+ dp[1] = 1;
+ dp[2] = 2;
+ dp[3] = 3;
+
+ for (int i = 4; i <= n; i++) {
+ dp[i] = i;
+ for (int j = 1; j * j <= i; j++) { // ์ ๊ณฑ์ ์ด์ ์ด ์๋ค๋ฉด ๊ทธ ์ด์ ๊บผ + ์ ๊ณฑ์ 1๊ฐ
+ dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
+ }
+ }
+
+ System.out.println(dp[n]);
+
+ }
+
+}
diff --git a/week14/BOJ17142.java b/week14/BOJ17142.java
new file mode 100644
index 0000000..6b2fb97
--- /dev/null
+++ b/week14/BOJ17142.java
@@ -0,0 +1,113 @@
+package week14;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ17142 {
+
+ static int n, v, m, res;
+ static List virus = new ArrayList<>();
+ static int[][] map;
+ static Queue q = new ArrayDeque<>();
+ static int[][] dir = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
+ static int[] num;
+ static final int INF = 1000000;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ res = INF;
+ map = new int[n][n];
+ num = new int[m];
+ int cntzero = 0;
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < n; j++) {
+ int a = Integer.parseInt(st.nextToken());
+ if (a == 2) {
+ virus.add(new int[] { i, j });
+ v++; // ๋ฐ์ด๋ฌ์ค์ ์ด ์
+ }
+ if (a == 0)
+ cntzero++; // ๊ฐ์ผ์์ผ์ผํ ์นธ ์
+ map[i][j] = a;
+ }
+ }
+
+ if (cntzero == 0) // ๊ฐ์ผ์ํฌ ์นธ์ด ์๋ ๊ฒฝ์ฐ 0 ์ถ๋ ฅ
+ System.out.println("0");
+ else {
+
+ combination(0, 0);
+
+ if (res == INF)
+ System.out.println("-1");
+ else
+ System.out.println(res);
+ }
+ }
+
+ static void bfs(boolean[][] visited, Queue q) {
+ int[][] time = new int[n][n]; // ๊ฐ ์นธ๋ณ ๊ฐ์ผ๋๋ ์๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด
+ int max = 0;
+
+ while (!q.isEmpty()) {
+ int[] cur = q.poll();
+ for (int d = 0; d < 4; d++) {
+ int dy = cur[0] + dir[d][0];
+ int dx = cur[1] + dir[d][1];
+
+ if (dy >= 0 && dy < n && dx >= 0 && dx < n && map[dy][dx] != 1 && !visited[dy][dx]) {
+ visited[dy][dx] = true; // ๊ฐ์ผ ๊ฐ๋ฅํ ๊ตฌ์ญ์ ์ฐพ์์ ๊ฐ์ผ์ํค๊ณ ์๊ฐ ์ ์ฅ
+ time[dy][dx] = time[cur[0]][cur[1]] + 1;
+ q.add(new int[] { dy, dx });
+ }
+ }
+ }
+
+ // ๋ชจ๋ ํ์์ด ๋๋๋ฉด ์ ์ง์ญ์ ๊ฐ์ผ์์ผฐ๋์ง ํ์ธ
+ boolean success = true;
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < n; j++) {
+ if (map[i][j] == 0) {
+ if (!visited[i][j]) {
+ success = false;
+ break;
+ } else {
+ max = Math.max(max, time[i][j]);
+ }
+ }
+ }
+ }
+
+ if (success) { // ๋ชจ๋ ๊ฐ์ผ ์์ผฐ๋ค๋ฉด res ๊ฐฑ์
+ res = Math.min(res, max);
+ }
+ }
+
+
+ static void combination(int cnt, int start) { // ์ฒ์ ํ์ฑํ์ํค๋ ๋ฐ์ด๋ฌ์ค ์กฐํฉ ๊ตฌํ๊ณ ํ์
+ if (cnt == m) {
+ boolean[][] visited = new boolean[n][n];
+ Queue q = new ArrayDeque<>();
+ for (int i = 0; i < m; i++) {
+ int[] cur = virus.get(num[i]);
+ visited[cur[0]][cur[1]] = true;
+ q.add(cur);
+ }
+ bfs(visited, q);
+ return;
+ }
+
+ for (int i = start; i < virus.size(); i++) {
+ num[cnt] = i;
+ combination(cnt + 1, i + 1);
+ }
+ }
+
+}
+
diff --git a/week14/BOJ2133.java b/week14/BOJ2133.java
new file mode 100644
index 0000000..ea26b66
--- /dev/null
+++ b/week14/BOJ2133.java
@@ -0,0 +1,31 @@
+package week14;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ2133 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int n = Integer.parseInt(st.nextToken());
+
+ int[] dp = new int[31]; // ์ต๋ 30์นธ ๊น์ง
+ dp[0] = 1;
+ dp[1] = 0;
+ dp[2] = 3;
+
+ for (int i = 4; i <= n; i += 2) { // ์ ํ์์ ์ด์ฉํ dp ํ์ด
+ dp[i] = 3 * dp[i - 2];
+ for (int j = 4; j <= i; j += 2) {
+ dp[i] += 2 * dp[i - j];
+ }
+ }
+
+ System.out.println(dp[n]);
+
+ }
+
+}
+
diff --git a/week14/BOJ2629.java b/week14/BOJ2629.java
new file mode 100644
index 0000000..61858be
--- /dev/null
+++ b/week14/BOJ2629.java
@@ -0,0 +1,59 @@
+package week14;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ2629 {
+
+ static int n, m, res;
+ static int[] w;
+ static boolean[][] chk;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+ StringBuilder sb = new StringBuilder();
+
+ n = Integer.parseInt(br.readLine());
+ w = new int[n];
+ st = new StringTokenizer(br.readLine());
+
+ for (int i = 0; i < n; i++) {
+ w[i] = Integer.parseInt(st.nextToken()); // ์ถ ๋ฌด๋ค
+ }
+
+ m = Integer.parseInt(br.readLine());
+ chk = new boolean[n + 1][15001];
+
+ dfs(0, 0);
+
+ st = new StringTokenizer(br.readLine());
+ for (int i = 0; i < m; i++) {
+ res = Integer.parseInt(st.nextToken()); // ๊ตฌ์ฌ ๋ฌด๊ฒ๋ฅผ ๊ทธ๋๊ทธ๋ ๋ฐ์์ ํ๋จ
+ if (res > 15001) {
+ sb.append("N ");
+ continue;
+ }
+ if (chk[n][res])
+ sb.append("Y ");
+ else
+ sb.append("N ");
+ }
+ System.out.println(sb);
+ }
+
+ static void dfs(int cnt, int weight) {
+ if (cnt > n || weight < 0 || weight > 15001 || chk[cnt][weight])
+ return;
+
+ chk[cnt][weight] = true; // cnt ๋ฒ์งธ๊น์ง์ ์ถ๋ฅผ ๊ณ ๋ คํ์ ๋์ ๊ฐ๋ฅํ ๋ฌด๊ฒ
+
+ if (cnt == n)
+ return;
+
+ dfs(cnt + 1, weight + w[cnt]); // ์ถ๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋
+ dfs(cnt + 1, weight); // ์ถ๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋
+ dfs(cnt + 1, Math.abs(weight - w[cnt])); // ์ถ๋ฅผ ๊ตฌ์ฌ์ชฝ์ ์ฌ๋ฆฌ๊ฑฐ๋
+ }
+}
+
diff --git a/week15/BOJ14719.java b/week15/BOJ14719.java
new file mode 100644
index 0000000..f2f48bb
--- /dev/null
+++ b/week15/BOJ14719.java
@@ -0,0 +1,46 @@
+package week15;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ14719 {
+
+ static int[] height;
+ static int n,m,result;
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ height = new int[m];
+
+ st = new StringTokenizer(br.readLine());
+ for(int i=0;i=0;i--) { // ์ค๋ฅธ์ชฝ ๋ฒฝ ๋์ด ๊ณ์ฐ
+ right[i] = Math.max(right[i+1], height[i]);
+ }
+
+ for(int i=0;i0)
+ result+=water;
+ }
+
+ System.out.println(result);
+ }
+
+}
+
diff --git a/week15/BOJ15683.java b/week15/BOJ15683.java
new file mode 100644
index 0000000..0723ef1
--- /dev/null
+++ b/week15/BOJ15683.java
@@ -0,0 +1,118 @@
+package week15;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ15683 {
+
+ static class camera { // ์นด๋ฉ๋ผ ์ ๋ณด ์ ์ฅ ํด๋์ค
+ int y, x, type;
+
+ public camera(int y, int x, int type) {
+ this.y = y;
+ this.x = x;
+ this.type = type;
+ }
+ }
+
+ static int n, m, result;
+ static int[][] maps;
+ static List cams = new ArrayList<>();
+ static int[][] dir = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ maps = new int[n][m];
+ result = Integer.MAX_VALUE;
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < m; j++) {
+ int a = Integer.parseInt(st.nextToken());
+ maps[i][j] = a;
+ if (a >= 1 && a <= 5) {
+ cams.add(new camera(i, j, a));
+ }
+ }
+ }
+
+ simulate(0, maps);
+
+ System.out.println(result);
+ }
+
+ static void simulate(int idx, int[][] map) {
+ if (idx == cams.size()) { // ์นด๋ฉ๋ผ ๋ค ํ์ธํ ๊ฒฝ์ฐ
+ int tmp = 0;
+ for (int i = 0; i < n; i++) { // ์ฌ๊ฐ์ง๋ ์ฒดํฌ
+ for (int j = 0; j < m; j++) {
+ if (map[i][j] == 0) {
+ tmp++;
+ }
+ }
+ }
+ result = Math.min(result, tmp); // ์ต์๊ฐ์ผ๋ก ๊ฐฑ์
+ return;
+ }
+
+ camera c = cams.get(idx);
+ int[][] backup = copy(map); // ๋ฐฑํธ๋ํน์ํด ํ์ฌ ์ํ ๋ฐ๋ก ์ ์ฅ
+
+ for (int d = 0; d < 4; d++) { // ์นด๋ฉ๋ผ 1,3,4์ ๊ฒฝ์ฐ์๋ 4๋ฒ ์ํ
+ watch(c, map, d); // ์นด๋ฉ๋ผ 2์ ๊ฒฝ์ฐ 2๋ฒ ์ํ, 5๋ 1๋ฒ ์ํ
+ simulate(idx + 1, map);
+ map = copy(backup);
+ if (c.type == 2 && d == 1) break;
+ if (c.type == 5) break;
+ }
+ }
+
+ static void watch(camera c, int[][] map, int direction) {
+ int type = c.type;
+ int y = c.y;
+ int x = c.x;
+
+ if (type == 1) { // 1๋ฐฉํฅ
+ observe(map, y, x, direction);
+ } else if (type == 2) { // ์๋ฐฉํฅ ๋ฐ๋๋ก
+ observe(map, y, x, direction);
+ observe(map, y, x, (direction + 2) % 4);
+ } else if (type == 3) { // ์๋ฐฉํฅ ์ง๊ฐ์ผ๋ก
+ observe(map, y, x, direction);
+ observe(map, y, x, (direction + 1) % 4);
+ } else if (type == 4) { // 3๋ฐฉํฅ
+ observe(map, y, x, direction);
+ observe(map, y, x, (direction + 1) % 4);
+ observe(map, y, x, (direction + 2) % 4);
+ } else if (type == 5) { // 4๋ฐฉํฅ
+ for (int d = 0; d < 4; d++) {
+ observe(map, y, x, d);
+ }
+ }
+ }
+
+ static void observe(int[][] map, int y, int x, int d) {
+ int ny = y + dir[d][0];
+ int nx = x + dir[d][1];
+
+ while (ny >= 0 && ny < n && nx >= 0 && nx < m) { // ๋งต ๋์ด๋ ๋ฒฝ๊น์ง ๊ฐ์
+ if (map[ny][nx] == 6) break;
+ if (map[ny][nx] == 0) map[ny][nx] = 7;
+ ny += dir[d][0];
+ nx += dir[d][1];
+ }
+ }
+
+ static int[][] copy(int[][] origin) { // ๋งต ๋ณต์ฌ ๋ฉ์๋
+ int[][] tmp = new int[n][m];
+ for (int i = 0; i < n; i++) {
+ tmp[i] = origin[i].clone();
+ }
+ return tmp;
+ }
+}
+
diff --git a/week15/BOJ16173.java b/week15/BOJ16173.java
new file mode 100644
index 0000000..9ed498f
--- /dev/null
+++ b/week15/BOJ16173.java
@@ -0,0 +1,50 @@
+package week15;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ16173 {
+
+ static int N;
+ static int[][] map;
+ static boolean[][] visited;
+ static boolean found = false;
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+
+ N = Integer.parseInt(br.readLine());
+ map = new int[N][N];
+ visited = new boolean[N][N];
+
+ for (int i = 0; i < N; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < N; j++) {
+ map[i][j] = Integer.parseInt(st.nextToken());
+ }
+ }
+
+ dfs(0, 0);
+
+ System.out.println(found ? "HaruHaru" : "Hing");
+ }
+
+ public static void dfs(int x, int y) {
+ if (x < 0 || y < 0 || x >= N || y >= N || visited[x][y]) {
+ return; // ์ด๋ ๊ฐ๋ฅ ์ ํจ์ฑ ๊ฒ์ฌ
+ }
+
+ visited[x][y] = true;
+
+ if (map[x][y] == -1) {
+ found = true;
+ return;
+ }
+
+ int jump = map[x][y];
+ dfs(x + jump, y); // ์๋ ์ด๋
+ dfs(x, y + jump); // ์ค๋ฅธ์ชฝ ์ด๋
+ }
+}
+
diff --git a/week15/BOJ20056.java b/week15/BOJ20056.java
new file mode 100644
index 0000000..a405f95
--- /dev/null
+++ b/week15/BOJ20056.java
@@ -0,0 +1,99 @@
+package week15;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ20056 {
+ static class Fireball {
+ int r, c, m, s, d;
+
+ public Fireball(int r, int c, int m, int s, int d) {
+ this.r = r;
+ this.c = c;
+ this.m = m;
+ this.s = s;
+ this.d = d;
+ }
+ }
+
+ static int N, M, K;
+ static List[][] map;
+ static int[] dr = {-1, -1, 0, 1, 1, 1, 0, -1};
+ static int[] dc = {0, 1, 1, 1, 0, -1, -1, -1};
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ N = Integer.parseInt(st.nextToken()); // ๊ฒฉ์ ํฌ๊ธฐ
+ M = Integer.parseInt(st.nextToken()); // ํ์ด์ด๋ณผ ๊ฐ์
+ K = Integer.parseInt(st.nextToken()); // ๋ช
๋ น ํ์
+
+ map = new ArrayList[N][N];
+ for (int i = 0; i < N; i++)
+ for (int j = 0; j < N; j++)
+ map[i][j] = new ArrayList<>();
+
+ List fireballs = new ArrayList<>();
+ for (int i = 0; i < M; i++) {
+ st = new StringTokenizer(br.readLine());
+ int r = Integer.parseInt(st.nextToken()) - 1;
+ int c = Integer.parseInt(st.nextToken()) - 1;
+ int m = Integer.parseInt(st.nextToken());
+ int s = Integer.parseInt(st.nextToken());
+ int d = Integer.parseInt(st.nextToken());
+ fireballs.add(new Fireball(r, c, m, s, d));
+ }
+
+ while (K-- > 0) {
+ // ํ์ด์ด๋ณผ ์ด๋
+ for (Fireball fb : fireballs) {
+ int nr = (fb.r + dr[fb.d] * fb.s % N + N) % N;
+ int nc = (fb.c + dc[fb.d] * fb.s % N + N) % N;
+ map[nr][nc].add(new Fireball(nr, nc, fb.m, fb.s, fb.d));
+ }
+
+ // ์ฒ๋ฆฌ
+ fireballs.clear();
+ for (int r = 0; r < N; r++) {
+ for (int c = 0; c < N; c++) {
+ if (map[r][c].size() == 0) continue;
+
+ if (map[r][c].size() == 1) {
+ fireballs.add(map[r][c].get(0));
+ } else {
+ int sumM = 0, sumS = 0;
+ boolean allEven = true, allOdd = true;
+
+ for (Fireball fb : map[r][c]) {
+ sumM += fb.m;
+ sumS += fb.s;
+ if (fb.d % 2 == 0) allOdd = false;
+ else allEven = false;
+ }
+
+ int newM = sumM / 5;
+ if (newM == 0) {
+ map[r][c].clear();
+ continue;
+ }
+
+ int newS = sumS / map[r][c].size();
+ int[] newDirs = (allEven || allOdd) ? new int[]{0, 2, 4, 6} : new int[]{1, 3, 5, 7};
+ for (int d : newDirs) {
+ fireballs.add(new Fireball(r, c, newM, newS, d));
+ }
+ }
+ map[r][c].clear();
+ }
+ }
+ }
+
+ int answer = 0;
+ for (Fireball fb : fireballs) {
+ answer += fb.m;
+ }
+ System.out.println(answer);
+ }
+}
+
diff --git a/week16/BOJ10157.java b/week16/BOJ10157.java
new file mode 100644
index 0000000..a82d80d
--- /dev/null
+++ b/week16/BOJ10157.java
@@ -0,0 +1,61 @@
+package week16;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ10157 {
+
+ static boolean[][] map;
+ static int n, m, num;
+ static int[][] dir = { { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 } };
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+
+ map = new boolean[m][n];
+
+ int count = n*m;
+ int cnt = 1;
+ num = Integer.parseInt(br.readLine());
+
+ int y = m-1; // ๋ฐฐ์ด๋ก ํ์ ๋ ์ผ์ชฝ ํ๋จ์์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ขํ ๋ง์ถฐ์ค
+ int x = 0;
+ map[y][x] = true;
+ int dnum = 0;
+ while(cnt<=count) {
+ if(cnt==num) { // ๋ฒํธ ๋์ฐฉํ ๊ฒฝ์ฐ ์ถ๋ ฅํ๊ณ ์ข
๋ฃ
+ System.out.println((x+1) + " " + (m-y));
+ return;
+ }
+ if(cnt==count)
+ break;
+ int dy = y + dir[dnum][0];
+ int dx = x + dir[dnum][1];
+
+ // ๋ฌํฝ์ด ๋ชจ์์ผ๋ก ๋๊ธฐ ์ํ ์กฐ๊ฑด๋ค
+ if(dy<0||dy>=m||dx<0||dx>=n) { // ์๊ณ์ ์ด๊ฑฐ๋
+ dnum++;
+ dnum = dnum%4;
+ continue;
+ }
+ if(map[dy][dx]) { // ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ์ ๋ง๋๋ฉด ๋ฐฉํฅ ์ ํ
+ dnum++;
+ dnum = dnum%4;
+ continue;
+ }
+ map[dy][dx]=true;
+ y=dy;
+ x=dx;
+
+ cnt++;
+ }
+
+ System.out.println("0"); // ๋ชป ์๋ ๊ฒฝ์ฐ
+ }
+
+}
+
diff --git a/week16/BOJ1459.java b/week16/BOJ1459.java
new file mode 100644
index 0000000..90fbe87
--- /dev/null
+++ b/week16/BOJ1459.java
@@ -0,0 +1,46 @@
+package week16;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ1459 {
+
+ static long x, y, w, s, res; // ์๊ฐ ํฌ๊ธฐ ๋๋ฌธ์ long ์ฌ์ฉ
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ x = Integer.parseInt(st.nextToken());
+ y = Integer.parseInt(st.nextToken());
+ w = Integer.parseInt(st.nextToken());
+ s = Integer.parseInt(st.nextToken());
+
+ long height = Math.min(x, y); // ์ธ๋ก ๊ฑฐ๋ฆฌ
+
+ if (s <= 2 * w) { // ๋๊ฐ์ ์ด ์ด๋์ธ ๊ฒฝ์ฐ
+ res += s * height;
+ } else {
+ res += w * 2 * height;
+ }
+
+ long width = Math.max(x, y) - Math.min(x, y); // ๊ฐ๋ก ๊ฑฐ๋ฆฌ
+ if (width % 2 == 0) { // ๋จ์ ๊ฑฐ๋ฆฌ๊ฐ ์ง์์ผ ๋
+ if (2 * s <= 2 * w) { // ์ง๊ทธ์ฌ๊ทธ๊ฐ ์ด๋์ธ ๊ฒฝ์ฐ
+ res += 2 * s * (width / 2);
+ } else { // ์ง์ ์ด๋์ด ์ด๋์ธ ๊ฒฝ์ฐ
+ res += w * width;
+ }
+ } else { // ๋จ์ ๊ฑฐ๋ฆฌ๊ฐ ํ์์ผ ๋
+ if (2 * s <= 2 * w) {
+ res += 2 * s * (width / 2);
+ res += w;
+ } else {
+ res += w * width;
+ }
+ }
+
+ System.out.println(res);
+ }
+
+}
diff --git a/week16/BOJ18111.java b/week16/BOJ18111.java
new file mode 100644
index 0000000..619345a
--- /dev/null
+++ b/week16/BOJ18111.java
@@ -0,0 +1,57 @@
+package week16;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ18111 {
+
+ static int n, m, b;
+ static int[][] map;
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ b = Integer.parseInt(st.nextToken());
+
+ map = new int[n][m];
+
+ for (int i = 0; i < n; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 0; j < m; j++) {
+ int a = Integer.parseInt(st.nextToken());
+ map[i][j] = a;
+ }
+ }
+
+ int restime = Integer.MAX_VALUE;
+ int resh = 0;
+
+ for (int h = 0; h <= 256; h++) { // ๋์ด๋ฅผ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ ํ์
+ int remove = 0;
+ int place = 0;
+
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < m; j++) {
+ if (map[i][j] > h) {
+ remove += map[i][j] - h; // ๋ถ์
์ผ ๋๋ ๊ฒฝ์ฐ ํ์
+ } else {
+ place += h - map[i][j]; // ์ค์นํด์ผ ๋๋ ๊ฒฝ์ฐ ํ์
+ }
+ }
+ }
+
+ if (remove + b >= place) { // ์๊ฐ ๊ณ์ฐ
+ int time = remove * 2 + place;
+ if (time <= restime) {
+ restime = time;
+ resh = h;
+ }
+ }
+ }
+ System.out.println(restime + " " + resh);
+ }
+}
+
diff --git a/week16/BOJ2578.java b/week16/BOJ2578.java
new file mode 100644
index 0000000..66053a6
--- /dev/null
+++ b/week16/BOJ2578.java
@@ -0,0 +1,72 @@
+package week16;
+
+import java.io.*;
+import java.util.*;
+
+public class BOJ2578 {
+
+ static Map list = new HashMap<>();
+ static int[] x = new int[6];
+ static int[] y = new int[6];
+ static int[] diagonal = new int[2];
+ static boolean[] x_done = new boolean[6];
+ static boolean[] y_done = new boolean[6];
+ static boolean[] d_done = new boolean[2];
+ static int bingo = 0;
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+
+ for (int i = 1; i <= 5; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 1; j <= 5; j++) {
+ int num = Integer.parseInt(st.nextToken());
+ list.put(num, new int[] { i, j }); // ๋น๊ณ ํ์ map์ผ๋ก ์ฌ์ฉ
+ }
+ }
+
+ int cnt = 0;
+
+ for (int i = 1; i <= 5; i++) {
+ st = new StringTokenizer(br.readLine());
+ for (int j = 1; j <= 5; j++) {
+ cnt++;
+ int num = Integer.parseInt(st.nextToken());
+ int[] temp = list.get(num);
+
+ int r = temp[0];
+ int c = temp[1];
+
+ x[r]++; // ๊ฐ๋ก์ด ์ฒดํฌ
+ y[c]++; // ์ธ๋ก์ด ์ฒดํฌ
+ if (r == c) diagonal[0]++; // ๋๊ฐ์ 1
+ if (r + c == 6) diagonal[1]++; // ๋๊ฐ์ 2
+
+ // ๋น๊ณ ๊ฐ์ ์ฒดํฌ
+ if (x[r] == 5 && !x_done[r]) {
+ bingo++;
+ x_done[r] = true;
+ }
+ if (y[c] == 5 && !y_done[c]) {
+ bingo++;
+ y_done[c] = true;
+ }
+ if (diagonal[0] == 5 && !d_done[0]) {
+ bingo++;
+ d_done[0] = true;
+ }
+ if (diagonal[1] == 5 && !d_done[1]) {
+ bingo++;
+ d_done[1] = true;
+ }
+
+ if (bingo >= 3) { // ์กฐ๊ฑด ๋ง์กฑ์
+ System.out.println(cnt);
+ return;
+ }
+ }
+ }
+ }
+}
+
diff --git a/week5/BOJ1205.java b/week5/BOJ1205.java
new file mode 100644
index 0000000..1558523
--- /dev/null
+++ b/week5/BOJ1205.java
@@ -0,0 +1,63 @@
+package week5;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.StringTokenizer;
+
+public class BOJ1205 {
+
+ public static class rank { // ๋ณ์๋ค์ ์ ์ฅํ๊ธฐ ์ํ ํด๋์ค
+ int score;
+ int index;
+
+ public rank(int score, int index) {
+ this.score = score;
+ this.index = index;
+ }
+ }
+
+ public static void main(String[] args) throws Exception{
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ int N = Integer.parseInt(st.nextToken());
+ int taesoo = Integer.parseInt(st.nextToken());
+ int P = Integer.parseInt(st.nextToken());
+ StringBuilder sb = new StringBuilder();
+ if(N==0) { // ๋ญํน์ด ๋น์ด์๋๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด 1๋ฑ์ด๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ
+ sb.append("1");
+ }
+ else {
+ LinkedList list = new LinkedList<>(); // ๋ญํฌ ํ์
์ ๋ฆฌ์คํธ ์์ฑ
+ st = new StringTokenizer(br.readLine());
+ for(int i=0;i() { // ๋ฆฌ์คํธ๋ฅผ ์ค์ฝ์ด ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
+ @Override
+ public int compare(rank o1, rank o2) {
+ return o2.score-o1.score;
+ }
+ });
+
+ if(list.indexOf(r)+1>P) { // ํ์์ ๋ฑ์๊ฐ ๋ญํน๋ฒ์ ๋ฐ์ธ ๊ฒฝ์ฐ
+ sb.append("-1");
+ }
+ else {
+ for(int i=0;i<=list.indexOf(r);i++) { // ํ์์ ๋ฑ์๊ฐ ๋ญํน๋ฒ์ ์์ธ ๊ฒฝ์ฐ
+ if(list.get(i).score==r.score) { // ํ์์ ๋์ ์ด ์๋์ง ์ฐพ์์
+ sb.append(list.indexOf(list.get(i))+1); // ํ์๋ ๋์ ์ธ ๊ฒฝ์ฐ ๊ฐ์ฅ ํ์์์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์์ ๋ฑ์ ์ถ๋ ฅ
+ break;
+ }
+ }
+ }
+ }
+
+ System.out.println(sb);
+
+
+ }
+
+}
diff --git a/week5/BOJ1244.java b/week5/BOJ1244.java
new file mode 100644
index 0000000..a17a457
--- /dev/null
+++ b/week5/BOJ1244.java
@@ -0,0 +1,79 @@
+package week5;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ1244 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int num = Integer.parseInt(st.nextToken())+1;
+ boolean[] onoff = new boolean[num]; // ์ค์์น ์จ ์คํ๋ฅผ boolean ํ์
๋ฐฐ์ด๋ก ์ ์ธํ์ฌ ๊ด๋ฆฌ
+
+ st = new StringTokenizer(br.readLine());
+ for (int i = 1; i < num; i++) {
+ int chk = Integer.parseInt(st.nextToken());
+ if (chk == 1)
+ onoff[i] = true;
+ }
+
+ int peoplenum = Integer.parseInt(br.readLine());
+
+ for (int i = 0; i < peoplenum; i++) {
+ st = new StringTokenizer(br.readLine());
+
+ int sex = Integer.parseInt(st.nextToken());
+ int idx = Integer.parseInt(st.nextToken());
+
+ if (sex == 1) { // ์ฑ๋ณ์ด ๋จ์์ธ ๊ฒฝ์ฐ
+ int count = 1;
+ while (idx * count < num) { // ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋์ ๋ ๊น์ง
+ onoff[idx * count] = !onoff[idx * count]; // ๊ณฑํ๋ฉด์ ์ค์์น๋ฅผ ์กฐ์
+ count++;
+ }
+ }
+
+ else { // ์ฑ๋ณ์ด ์ฌ์์ธ ๊ฒฝ์ฐ ์ง์ ํ ์ธ๋ฑ์ค์ ์ค์์น ๊ธฐ์ค ๋์นญ์ธ ๊ณณ์ ์ค์์น๋ฅผ ์กฐ์
+ int count = 1;
+ onoff[idx] = !onoff[idx]; // ์ง์ ์์น๋ ๋ฌด์กฐ๊ฑด ์กฐ์
+ while (true) {
+ if (idx - count >= 1 && idx + count < num) { // ์ธ๋ฑ์ค ๋ฒ์ ํ๋จ
+ if (onoff[idx - count] == onoff[idx + count]) { // ๋์นญ์ธ์ง ํ๋จํ์ฌ ์ค์์น ์กฐ์
+ onoff[idx - count] = !onoff[idx - count];
+ onoff[idx + count] = !onoff[idx + count];
+ } else { // ๋์นญ์ด ์๋ ๊ฒฝ์ฐ break
+ break;
+ }
+ } else {
+ break;
+ }
+ count++;
+ }
+
+ }
+ }
+
+ StringBuilder sb = new StringBuilder();
+ int count = 0;
+ for (int i = 1; i < num; i++) { // ์ถ๋ ฅ ํฌ๋งท์ ๋ง๊ฒ ์์
+ if(onoff[i]) {
+ sb.append("1 ");
+ }
+ else {
+ sb.append("0 ");
+ }
+ count++;
+
+ if(count==20) {
+ sb.append("\n");
+ count=0;
+ }
+ }
+
+ System.out.println(sb);
+
+ }
+
+}
diff --git a/week5/BOJ20125.java b/week5/BOJ20125.java
new file mode 100644
index 0000000..83626a0
--- /dev/null
+++ b/week5/BOJ20125.java
@@ -0,0 +1,71 @@
+package week5;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ20125 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ int num = Integer.parseInt(st.nextToken());
+
+ char[][] cookie = new char[num][num];
+ for (int i = 0; i < num; i++) {
+ cookie[i] = br.readLine().toCharArray(); // ์
๋ ฅ์ ๊ฐ ์นธ์์ ์ฐพ๊ธฐ ์ํด ํ์ค์ฉ ๋ฐ์์ charํ ์ด์ค๋ฐฐ์ด๋ก ๋ณํ
+ }
+
+ int heartx = 0, hearty = 0;
+ boolean findheart = false;
+ for (int i = 0; i < num; i++) { // ๋ฐฐ์ด์ 0,0์์ ์ฐพ์๊ฐ๋ฉฐ ์ฟ ํค๊ฐ ์ฒ์ ์ฌ๋ผ๊ฐ ์๋ ๊ณณ์ ์ฐพ์ -> ๊ทธ๊ณณ์ด ์ฟ ํค์ ๋จธ๋ฆฌ์ด๊ณ ํ์นธ ์๋๊ฐ ์ฌ์ฅ
+ for (int j = 0; j < num; j++) {
+ if (cookie[i][j] == '*') {
+ findheart = true;
+ heartx = j;
+ hearty = i + 1;
+ }
+ }
+ if (findheart) {
+ break;
+ }
+ }
+ int larm = 0, rarm = 0, lleg = 0, rleg = 0, back = 0;
+
+ for(int i=0;i hash = new HashMap<>(); // ํ ๋ฒ ๊ฒ์ํ ํ๋ ์ด์ด์๋ ๋ค์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ํด์๋งต ์ฌ์ฉ
+
+ for (int i = 0; i < num; i++) {
+ hash.put(br.readLine(), null);
+ }
+
+ int length = hash.size();
+
+ switch (game) { // ๊ฒ์์ ํ์ํ ์ธ์์ 2,3,4 ์ด์ง๋ง ์์ค๊ฐ ์ฐธ์ฌํ๊ธฐ ๋๋ฌธ์ 1,2,3์ผ๋ก ๋๋
+ case "Y":
+ System.out.println(length / 1);
+ break;
+ case "F":
+ System.out.println(length / 2);
+ break;
+ case "O":
+ System.out.println(length / 3);
+ break;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/week5/BOJ4659.java b/week5/BOJ4659.java
new file mode 100644
index 0000000..24ddb5e
--- /dev/null
+++ b/week5/BOJ4659.java
@@ -0,0 +1,67 @@
+package week5;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class BOJ4659 {
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringBuilder sb = new StringBuilder();
+ while(true) {
+ String str = br.readLine();
+ boolean hasmo = false; // ๊ท์น 1 : ๋ชจ์์ด ํ๋ ์ด์ ๋ฐ๋์ ์์ด์ผ ํจ์ ์ฒดํฌํ๊ธฐ ์ํ ๋ณ์
+ char[] moem = {'a','e','i','u','o'}; // ๋ชจ์์ ์ฒดํฌํ๊ธฐ ์ํด ๋ฏธ๋ฆฌ ์ ์ธ
+ int seqcount=0; // ๊ท์น 2 : 3์ฐ์์ ๋ชจ์, ์์์ ์ฒดํฌํ๊ธฐ ์ํ ๋ณ์
+ boolean sameduple = false; // ๊ท์น 3 : ๊ฐ์ ๋ฌธ์๊ฐ ์ฐ์์ ์ฒดํฌํ๊ธฐ ์ํ ๋ณ์
+ if(str.equals("end")) {
+ break;
+ }
+
+ sb.append("<"+str+"> "); // ์ถ๋ ฅ ํฌ๋งท์ ๋งก๊ฒ ๋ง๋ฌ
+
+ char[] strchar = str.toCharArray(); // ํ๊ธ์์ฉ ํ์ธํ๊ธฐ์ํด ๋ฐฐ์ด๋ก ๋ณํ
+
+ for(int i=0;i0) { // ์์ ์ผ๋๋ seqcount๊ฐ ์์๋ก ๋ด๋ ค๊ฐ
+ seqcount=0;
+ }
+ seqcount--;
+ }
+
+ if(i+12||sameduple) { // ํ ๊ธ์์ ๊ฒ์ฆ์ด ๋๋ฌ์ ๋ ์ด๋ฏธ ๊ท์น์ ์ด๊ธ๋๋ฉด ํ์ถ
+ break;
+ }
+ }
+
+ if(Math.abs(seqcount)<3&&!sameduple&&hasmo) { // ๋ชจ๋ ๊ท์น์ ๋ถํฉํ๋ฉด
+ sb.append("is acceptable.\n");
+ }
+ else {
+ sb.append("is not acceptable.\n"); // ๊ท์น์ ์ด๊ธ๋๋ฉด
+ }
+
+ }
+ System.out.println(sb);
+ }
+
+}
\ No newline at end of file
diff --git a/week6/BOJ1094.java b/week6/BOJ1094.java
new file mode 100644
index 0000000..910b45d
--- /dev/null
+++ b/week6/BOJ1094.java
@@ -0,0 +1,19 @@
+package week6;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class BOJ1094 {
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ int X = Integer.parseInt(br.readLine());
+ int count = 0;
+ for (int i = 0; i <= 6; i++) { // ์ต๋ 64๊น์ง ๋นํธ์ฐ์ฐ
+ if ((X & 1 << i) != 0)
+ count++;
+ }
+
+ System.out.println(count);
+ }
+}
diff --git a/week6/BOJ11053.java b/week6/BOJ11053.java
new file mode 100644
index 0000000..7739c95
--- /dev/null
+++ b/week6/BOJ11053.java
@@ -0,0 +1,40 @@
+package week6;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ11053 {
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ int N = Integer.parseInt(st.nextToken());
+ int[] arr = new int[N];
+ int[] dp = new int[N];
+ st = new StringTokenizer(br.readLine());
+
+ for (int i = 0; i < N; i++) {
+ arr[i] = Integer.parseInt(st.nextToken());
+ }
+
+ for (int i = 0; i < N; i++) {
+ dp[i] = 1; // ๊ฐ ์๋ฆฌ๋ถํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ์ต์ 1๋ถํฐ ์์
+ }
+
+ for (int i = 1; i < N; i++) { // ํ์ฌ ์๋ฆฌ
+ for (int j = 0; j < i; j++) { // 0์ธ๋ฑ์ค ๋ถํฐ ํ์ฌ ์ง์ ๊น์ง
+ if (arr[i] > arr[j]) { // ์์ ๊ฒ์ด ์์ผ๋ฉด
+ dp[i] = Math.max(dp[i], dp[j] + 1); // ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ๊ธธ์ด ์ฆ๊ฐ
+ }
+ }
+ }
+
+ int max = 0;
+ for (int i = 0; i < N; i++) {
+ max = Math.max(max, dp[i]); // ์ต๋์น ๋ฝ์
+ }
+
+ System.out.println(max);
+ }
+}
diff --git a/week6/BOJ15651.java b/week6/BOJ15651.java
new file mode 100644
index 0000000..9b6071b
--- /dev/null
+++ b/week6/BOJ15651.java
@@ -0,0 +1,40 @@
+package week6;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ15651 {
+ static int N,M;
+ static int[] numbers;
+ static StringBuilder sb = new StringBuilder();
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ N =Integer.parseInt(st.nextToken());
+ M = Integer.parseInt(st.nextToken());
+
+ numbers = new int[M];
+
+ permutation(0);
+
+ System.out.println(sb);
+ }
+
+ public static void permutation(int cnt) {
+ if (cnt == M) {
+ for(int a : numbers) {
+ sb.append(a+" ");
+ }
+ sb.append("\n");
+ return;
+ }
+
+ for (int i = 1; i <= N; i++) { // ์ค๋ณต ์กฐํฉ์ด๋ฏ๋ก start ์ค์ ํ์ X
+ numbers[cnt] = i;
+ permutation(cnt + 1);
+ }
+ }
+}
diff --git a/week6/BOJ6603.java b/week6/BOJ6603.java
new file mode 100644
index 0000000..06ea37c
--- /dev/null
+++ b/week6/BOJ6603.java
@@ -0,0 +1,49 @@
+package week6;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ6603 {
+ static int[] arr,numbers;
+ static int k;
+ static StringBuilder sb = new StringBuilder();
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ while(true) {
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ k = Integer.parseInt(st.nextToken());
+
+ if(k==0) { // 0 ์
๋ ฅ์ผ๋ก ๋ฐ๋ณต ์ข
๋ฃ
+ break;
+ }
+
+ arr = new int[k];
+ numbers = new int[6];
+ for(int i=0;i= 2) { // ์ต์ 2๊ฐ ์ด์ ๊ณ ๋ฅธ ๊ฒฝ์ฐ์ ์กฐ๊ฑด ํ๋จ
+ for (int i = 0; i < N; i++) {
+ if (isSelected[i]) {
+ sum += numbers[i]; // ๋์ด๋ ํฉ ๊ณ์ฐ
+ if (max < numbers[i]) // ์ต๋๊ฐ ๊ฐฑ์
+ max = numbers[i];
+ if (min > numbers[i]) // ์ต์๊ฐ ๊ฐฑ์
+ min = numbers[i];
+ }
+ }
+
+ if (sum >= L && sum <= R && (max - min) >= X) // ์กฐ๊ฑด ํ์ธ
+ res++;
+ }
+
+ return;
+ }
+
+ isSelected[cnt] = true; // ๊ณ ๋ฅธ ๊ฒฝ์ฐ
+ subset(cnt + 1, pick + 1);
+
+ isSelected[cnt] = false; // ์๊ณ ๋ฅธ ๊ฒฝ์ฐ
+ subset(cnt + 1, pick);
+
+ }
+
+}
diff --git a/week7/BOJ1759.java b/week7/BOJ1759.java
new file mode 100644
index 0000000..77c5a01
--- /dev/null
+++ b/week7/BOJ1759.java
@@ -0,0 +1,66 @@
+package week7;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.StringTokenizer;
+
+public class BOJ1759 {
+
+ static int L,C;
+ static char[] characters, res;
+ static boolean[] isSelected;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ L = Integer.parseInt(st.nextToken()); // L๊ฐ๋ฅผ ๋ฝ์ ๋น๋ฐ๋ฒํธ ์์ฑ
+ C = Integer.parseInt(st.nextToken()); // ์ด C๊ฐ์ ๋ฌธ์๊ฐ ์กด์ฌ
+ characters = new char[C]; // ๋ฌธ์ ๋ฐฐ์ด
+ res = new char[L]; // ๋น๋ฐ๋ฒํธ ๋ฐฐ์ด
+ isSelected = new boolean[C]; // ์ ํ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฐฐ์ด
+
+ st = new StringTokenizer(br.readLine());
+ for(int i=0;i=2) { // 1๊ฐ ์ด์์ ๋ชจ์, 2๊ฐ ์ด์์ ์์์ธ ๊ฒฝ์ฐ ์ถ๋ ฅ
+ for(char a:res) {
+ System.out.print(a);
+ }
+ System.out.println();
+ }
+
+ return;
+ }
+
+ for(int i=start;i[] graph;
+ static int[] res;
+ static boolean[] isSelected;
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ N = Integer.parseInt(st.nextToken()); // N๊ฐ์ ์ซ์
+
+ graph = new ArrayList[N+1]; // ์ธ์ ๋ฆฌ์คํธ๋ก ๋ณ๊ฒฝ
+ for (int i = 1; i <= N; i++) {
+ graph[i] = new ArrayList<>();
+ }
+
+ isSelected = new boolean[N+1];
+ res = new int[N+1];
+
+ for (int i = 0; i < N-1; i++) {
+ st = new StringTokenizer(br.readLine());
+ int n1 = Integer.parseInt(st.nextToken());
+ int n2 = Integer.parseInt(st.nextToken());
+ graph[n1].add(n2);
+ graph[n2].add(n1);
+ }
+
+ bfs(1);// ํธ๋ฆฌ์ ๋ฃจํธ๊ฐ 1์ด๋ผ๊ณ ๊ฐ์
+
+ for (int i = 2; i <= N; i++) {
+ System.out.println(res[i]);
+ }
+ }
+
+ static void bfs(int start) {
+ Queue queue = new LinkedList<>();
+ queue.add(start);
+ isSelected[start] = true;
+
+ while (!queue.isEmpty()) {
+ int current = queue.poll();
+
+ for (int neighbor : graph[current]) {
+ if (!isSelected[neighbor]) {// ๊ฐ ๋
ธ๋์ ๋ถ๋ชจ๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋
ธ๋๋ก ๋ถ๋ชจ ์ ์ฅ
+ isSelected[neighbor] = true;
+ res[neighbor] = current;
+ queue.add(neighbor);
+ }
+ }
+ }
+ }
+}
diff --git a/week8/BOJ15663.java b/week8/BOJ15663.java
new file mode 100644
index 0000000..677e489
--- /dev/null
+++ b/week8/BOJ15663.java
@@ -0,0 +1,63 @@
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+public class BOJ15663 {
+
+ static int N,M;
+ static int[] numbers, res;
+ static boolean[] isSelected;
+ static Set set = new HashSet<>();
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ N = Integer.parseInt(st.nextToken()); // N๊ฐ์ ์ซ์
+ M = Integer.parseInt(st.nextToken()); // M๊ฐ๋ฅผ ๋ฝ์ ์์ด
+ numbers = new int[N];
+ res = new int[M];
+ isSelected = new boolean[N];
+
+ st = new StringTokenizer(br.readLine());
+ for(int i=0;i {
+ int index;
+ int weight;
+
+ public Node(int index, int cost) {
+ this.index = index;
+ this.weight = cost;
+ }
+
+ @Override
+ public int compareTo(Node o) {
+ return Integer.compare(this.weight, o.weight);
+ }
+}
+
+public class BOJ1753 {
+
+ static ArrayList[] graph;
+ static int N,M;
+
+ public static void main(String[] args) throws Exception {
+
+ // ๊ทธ๋ํ ์
๋ ฅ ๋ฐ๊ธฐ
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ // ์ ์ ์ ๊ฐ์, ๊ฐ์ ์ ๊ฐ์
+ N = Integer.parseInt(st.nextToken());
+ M = Integer.parseInt(st.nextToken());
+ int start = Integer.parseInt(br.readLine());
+
+ graph = new ArrayList[N + 1]; // ์ธ์ ๋ฆฌ์คํธ ์ฌ์ฉ
+ for (int i = 0; i <= N; i++)
+ graph[i] = new ArrayList<>();
+
+ for (int i = 0; i < M; i++) {
+ st = new StringTokenizer(br.readLine());
+ int u = Integer.parseInt(st.nextToken());
+ int v = Integer.parseInt(st.nextToken());
+ int w = Integer.parseInt(st.nextToken());
+
+ graph[u].add(new Node(v, w));
+ }
+
+ // ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ์ํ
+ Dijkstra(N, start);
+
+ }
+
+ // ๋
ธ๋์ ํฌ๊ธฐ, ์ถ๋ฐ์ง
+ public static void Dijkstra(int n, int start) { //๋ค์ต์คํธ๋ผ
+ boolean[] check = new boolean[n + 1];
+ int[] dist = new int[n + 1];
+ int INF = Integer.MAX_VALUE;
+
+ Arrays.fill(dist, INF);
+ dist[start] = 0;
+
+ PriorityQueue pq = new PriorityQueue<>(); // priorityqueue๋ฅผ ์ฌ์ฉํ ๋ค์ต์คํธ๋ผ
+ pq.offer(new Node(start, 0));
+
+ while (!pq.isEmpty()) {
+ int curr = pq.poll().index;
+
+ if (check[curr]) // ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ค๋ฉด ํจ์ค
+ continue;
+ check[curr] = true;
+
+ // index์ ์ฐ๊ฒฐ๋ ์ ์ ๋น๊ต
+ for (Node next : graph[curr]) {
+ if (dist[next.index] > dist[curr] + next.weight) { // ๊ธฐ์กด์ ๊ฐ๋ ๋น์ฉ์ด ์๋ก ํ์
ํ ๋ฃจํธ๋ณด๋ค ํฐ ๊ฒฝ์ฐ ์ต์ ํ
+ dist[next.index] = dist[curr] + next.weight;
+
+ pq.offer(new Node(next.index, dist[next.index]));
+ }
+ }
+ }
+
+ // ์ต์๊ฑฐ๋ฆฌ ์ถ๋ ฅ
+ for (int i=1;i<=N;i++) {
+ if (dist[i] == INF)
+ System.out.println("INF");
+ else
+ System.out.println(dist[i]);
+ }
+ }
+}
\ No newline at end of file
diff --git a/week8/BOJ5639.java b/week8/BOJ5639.java
new file mode 100644
index 0000000..8990943
--- /dev/null
+++ b/week8/BOJ5639.java
@@ -0,0 +1,61 @@
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.*;
+
+public class BOJ5639 {
+ static class Node {
+ int num;
+ Node lchild;
+ Node rchild;
+
+ public Node(int num) {
+ this.num = num;
+ lchild = rchild = null;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringBuilder sb = new StringBuilder();
+
+ Node root = new Node(Integer.parseInt(br.readLine()));
+
+ Stack stack = new Stack<>();
+
+ while (true) {
+ String s = br.readLine();
+ if (s == null || s.equals("")) // ์
๋ ฅ ์ข
๋ฃ ์ฒ๋ฆฌ
+ break;
+
+ if (stack.isEmpty()) {
+ stack.push(root);
+ }
+
+ Node tmp = new Node(Integer.parseInt(s));
+
+ if (stack.peek().num > tmp.num) { // ๋ค์ ์ถ๋ ฅ๋๋ ์๊ฐ ํ์ฌ ์๋ณด๋ค ์๋ค๋ฉด
+ stack.peek().lchild = tmp; // ์ผ์ชฝ์์์ผ๋ก ์ ์ฅ
+ stack.push(tmp);
+ } else { // ํฌ๋ค๋ฉด
+ Node parent = null;
+ while (!stack.isEmpty() && stack.peek().num < tmp.num) { // ๊ทธ ๋
ธ๋์ ์ ์ ํ ์์น ํ์
+ parent = stack.pop();
+ }
+ parent.rchild = tmp; // ์ค๋ฅธ์ชฝ ์์์ผ๋ก ์ ์ฅ
+ stack.push(tmp);
+ }
+ }
+
+ print(root);
+ }
+
+ public static void print(Node n) { // ํ์์ํ
+ if (n == null) {
+ return;
+ }
+ print(n.lchild);
+ print(n.rchild);
+ System.out.println(n.num);
+ }
+
+}
diff --git a/week9/BOJ10026.java b/week9/BOJ10026.java
new file mode 100644
index 0000000..67f766f
--- /dev/null
+++ b/week9/BOJ10026.java
@@ -0,0 +1,115 @@
+package week9;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayDeque;
+import java.util.Queue;
+
+public class BOJ10026 {
+
+ static int[][] arr;
+ static int[][] arr2;
+ static int n, m, s;
+ static boolean[][] visited;
+ static int[][] dir = { { 0, -1 }, { 0, 1 }, { 1, 0 }, { -1, 0 } };
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ n = Integer.parseInt(br.readLine());
+ arr = new int[n][n]; // ์ผ๋ฐ ์ฌ๋์ฉ ํ๋ ฌ
+ arr2 = new int[n][n]; // ์ ๋ก์๋งน ์ ์ฅ์ฉ ํ๋ ฌ
+ visited = new boolean[n][n];
+
+ for (int i = 0; i < n; i++) { // ํธ์๋ฅผ ์ํด ๊ฐ ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ์ฌ ์
๋ ฅ
+ String str = br.readLine();
+ for (int j = 0; j < n; j++) {
+ char c = str.charAt(j);
+ if (c == 'R') {
+ arr[i][j] = 1;
+ arr2[i][j]=1;
+ } else if (c == 'G') { // ์ ๋ก์๋งน์ R๊ณผ G์ผ๋ ๋ชจ๋ 1
+ arr[i][j] = 2;
+ arr2[i][j]=1;
+ } else if (c == 'B') {
+ arr[i][j] = 3;
+ arr2[i][j]=3;
+ }
+ }
+ }
+
+ int count=0; // ์ผ๋ฐ์ฌ๋์ฉ
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < n; j++) { // ๋ฐฉ๋ฌธ์ํ ๊ตฌ์ญ๋ง๋ค ์ฒดํฌํ๋ฉฐ ํ์ ์ฆ๊ฐ
+ if(!visited[i][j]&&arr[i][j]==1) {
+ count++;
+ bfs(new int[] {i,j},1);
+ }
+ else if(!visited[i][j]&&arr[i][j]==2) {
+ count++;
+ bfs(new int[] {i,j},2);
+ }
+ else if(!visited[i][j]&&arr[i][j]==3) {
+ count++;
+ bfs(new int[] {i,j},3);
+ }
+ }
+ }
+
+ int count2=0; // ์ ๋ก์๋งน์ฉ
+ visited = new boolean[n][n]; // ๋ฐฉ๋ฌธ๋ฐฐ์ด ์ด๊ธฐํ
+ for (int i = 0; i < n; i++) {
+ for (int j = 0; j < n; j++) { // ๋ฐฉ๋ฌธ์ํ ์ ๊ตฌ์ญ๋ง๋ค ์ฒดํฌํ๋ฉฐ ํ์ ์ฆ๊ฐ
+ if(!visited[i][j]&&arr2[i][j]==1) {
+ count2++;
+ bfs2(new int[] {i,j},1);
+ }
+ else if(!visited[i][j]&&arr2[i][j]==3) {
+ count2++;
+ bfs2(new int[] {i,j},3);
+ }
+ }
+ }
+
+ System.out.println(count+" "+count2);
+
+ }
+
+ static void bfs(int[] start, int col) { // ์ผ๋ฐ์ธ์ฉ bfs ํจ์
+ Queue list = new ArrayDeque<>();
+ list.add(start);
+ visited[start[0]][start[1]] = true;
+
+ while (list.size() != 0) {
+ int[] idx = list.poll();
+ for (int i = 0; i < 4; i++) {
+ int dy = idx[0] + dir[i][0];
+ int dx = idx[1] + dir[i][1];
+ if (dx >= 0 && dx < n && dy >= 0 && dy < n && !visited[dy][dx] && arr[dy][dx] == col) {
+ visited[dy][dx] = true;
+ list.add(new int[] { dy, dx });
+ }
+ }
+
+ }
+ }
+ static void bfs2(int[] start, int col) { // ์ ๋ก์๋งน์ฉ bfs ํจ์
+ Queue list = new ArrayDeque<>();
+ list.add(start);
+ visited[start[0]][start[1]] = true;
+
+ while (list.size() != 0) {
+ int[] idx = list.poll();
+ for (int i = 0; i < 4; i++) {
+ int dy = idx[0] + dir[i][0];
+ int dx = idx[1] + dir[i][1];
+ if (dx >= 0 && dx < n && dy >= 0 && dy < n && !visited[dy][dx] && arr2[dy][dx] == col) {
+ visited[dy][dx] = true;
+ list.add(new int[] { dy, dx });
+ }
+ }
+
+ }
+ }
+}
+
diff --git a/week9/BOJ1012.java b/week9/BOJ1012.java
new file mode 100644
index 0000000..b61612e
--- /dev/null
+++ b/week9/BOJ1012.java
@@ -0,0 +1,78 @@
+package week9;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ1012 {
+
+ static int N, M, K, ans, max;
+ static int[][] map;
+ static boolean[][] chk;
+ static boolean temp;
+ static int[][] dir = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+
+ int T = Integer.parseInt(br.readLine());
+
+ for (int t = 0; t < T; t++) {
+ StringTokenizer st = new StringTokenizer(br.readLine());
+ M = Integer.parseInt(st.nextToken()); // ๋ฐญ ๊ฐ๋ก ๊ธธ์ด
+ N = Integer.parseInt(st.nextToken()); // ๋ฐญ ์ธ๋ก ๊ธธ์ด
+ K = Integer.parseInt(st.nextToken()); // ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ง ์์น
+
+ map = new int[N][M];
+
+ for (int i = 0; i < K; i++) { // ๋ฐฐ์ถ ์์น ์
๋ ฅ๋ฐ์ ์ ์ฅ
+ st = new StringTokenizer(br.readLine());
+ int x = Integer.parseInt(st.nextToken());
+ int y = Integer.parseInt(st.nextToken());
+
+ map[y][x] = 1;
+ }
+ max = 0;
+
+ chk = new boolean[N][M];
+ ans = 0;
+ for (int i = 0; i < N; i++) {
+ for (int j = 0; j < M; j++) {
+ temp = false; // ๋ฐฐ์ถ๋ฐญ์ธ์ง ์๋์ง ํ๋จ๋จ
+ find(i, j);
+ if (temp) { // ๋ถ์ด์๋ ๋ฐฐ์ถ๋ฐญ์์๋ ๋ฐฐ์ถ๋ฒ๋ 1๋ง๋ฆฌ๋ง ํ์
+ ans++;
+ }
+ }
+ }
+ if (max < ans) {
+ max = ans;
+ }
+
+ System.out.println(max);
+ }
+ }
+
+ public static void find(int y, int x) {
+ if (chk[y][x] || map[y][x] != 1) { // ์ด๋ฏธ ์ฒดํฌ ํ๊ฑฐ๋ ๋ฐฐ์ถ๊ฐ ์๋๋ฉด
+ return;
+ } else {
+ for (int i = 0; i < 4; i++) { // ์ํ์ข์ฐ ํ์
+ int dy = y + dir[i][0];
+ int dx = x + dir[i][1];
+
+ if (dy < 0 || dy >= N || dx < 0 || dx >= M) {
+ continue;
+ } else {
+ chk[y][x] = true;
+ temp = true;
+ find(dy, dx);
+ }
+ }
+ }
+ return;
+ }
+
+}
+
diff --git a/week9/BOJ11404.java b/week9/BOJ11404.java
new file mode 100644
index 0000000..9611223
--- /dev/null
+++ b/week9/BOJ11404.java
@@ -0,0 +1,58 @@
+package week9;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.StringTokenizer;
+
+public class BOJ11404 {
+
+ static int[][] arr;
+ static int n, m;
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st;
+ n = Integer.parseInt(br.readLine());
+ m = Integer.parseInt(br.readLine());
+ arr = new int[n + 1][n + 1];
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++) {
+ if (i == j)
+ arr[i][j] = 0; // ์๊ธฐ ์์ ์ผ๋ก ๊ฐ ์๋ ์์ผ๋ 0
+ else
+ arr[i][j] = 9900001;// ๊ฐ ์ ์๋ ๊ฒฝ์ฐ ์ต๋ ๋น์ฉ +1 ๋ก ์ค์
+ }
+ }
+
+ for (int i = 0; i < m; i++) { // ์
๋ ฅ๋ฐ์์ ์ ์ฅ
+ st = new StringTokenizer(br.readLine());
+ int from = Integer.parseInt(st.nextToken());
+ int to = Integer.parseInt(st.nextToken());
+ int cost = Integer.parseInt(st.nextToken());
+ arr[from][to] = Math.min(arr[from][to], cost);
+ }
+
+ for (int k = 1; k <= n; k++) { // ํ๋ก์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉํ์ฌ ๋น์ฉ ๊ณ์ฐ
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++) {
+ arr[i][j] = Math.min(arr[i][j], arr[i][k] + arr[k][j]);
+ }
+ }
+ }
+
+ for (int i = 1; i <= n; i++) {
+ for (int j = 1; j <= n; j++) {
+ if (arr[i][j] > 9900000 || arr[i][j] == 0) { // 0์ด๊ฑฐ๋ ์ต๋๋น์ฉ๋ณด๋ค ๋น์ธ๋ฉด 0์ผ๋ก ์ถ๋ ฅ
+ System.out.print("0 ");
+ } else { // ๊ฐ ์ ์๋ ๊ฒฝ์ฐ ๋น์ฉ ์ถ๋ ฅ
+ System.out.print(arr[i][j] + " ");
+ }
+ }
+ System.out.println();
+ }
+
+ }
+
+}
+
diff --git a/week9/BOJ1260.java b/week9/BOJ1260.java
new file mode 100644
index 0000000..c97e099
--- /dev/null
+++ b/week9/BOJ1260.java
@@ -0,0 +1,74 @@
+package week9;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.StringTokenizer;
+
+public class BOJ1260 {
+
+ static int[][] arr;
+ static int n, m, s;
+ static boolean[] visited;
+
+ public static void main(String[] args) throws Exception {
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ n = Integer.parseInt(st.nextToken());
+ m = Integer.parseInt(st.nextToken());
+ s = Integer.parseInt(st.nextToken());
+ arr = new int[n + 1][n + 1]; // ์ธ์ ํ๋ ฌ ์ฌ์ฉ (N์ด 1000๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฌด๋ฐฉ)
+ visited = new boolean[n + 1];
+
+ for (int i = 0; i < m; i++) { // ๋ฌดํฅ ๊ทธ๋ํ๋ก ์
๋ ฅ๋ฐ๊ธฐ
+ st = new StringTokenizer(br.readLine());
+ int to = Integer.parseInt(st.nextToken());
+ int from = Integer.parseInt(st.nextToken());
+
+ arr[to][from] = 1;
+ arr[from][to] = 1;
+ }
+
+ dfs(s);
+ System.out.println();
+ visited = new boolean[n + 1];
+ bfs(s);
+ }
+
+ static void dfs(int start) { // dfs
+
+ visited[start] = true;
+ System.out.print(start + " ");
+
+ for (int i = 1; i <= n; i++) {
+ if (arr[start][i] == 1 && !visited[i]) {
+ dfs(i);
+ }
+ }
+
+ }
+
+ static void bfs(int start) { // bfs
+
+ Queue list = new ArrayDeque<>();
+ list.add(start);
+ visited[start] = true;
+
+ while (list.size() != 0) {
+ int idx = list.poll();
+ System.out.print(idx + " ");
+ for (int i = 1; i <= n; i++) {
+ if (arr[idx][i] == 1 && !visited[i]) {
+ visited[i] = true;
+ list.add(i);
+ }
+ }
+ }
+
+ }
+
+}
+
diff --git a/week9/BOJ1697.java b/week9/BOJ1697.java
new file mode 100644
index 0000000..0aae360
--- /dev/null
+++ b/week9/BOJ1697.java
@@ -0,0 +1,62 @@
+package week9;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.StringTokenizer;
+
+public class BOJ1697 {
+
+ static int[] line;
+ static boolean[] visited;
+ static int N, K, count;
+
+ public static void main(String[] args) throws IOException {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ StringTokenizer st = new StringTokenizer(br.readLine());
+
+ N = Integer.parseInt(st.nextToken());
+ K = Integer.parseInt(st.nextToken());
+
+ visited = new boolean[100001];
+ line = new int[100001];
+ bfs(N);
+
+ System.out.println(line[K]);
+ }
+
+ public static void bfs(int start) {
+ Queue list = new ArrayDeque<>();
+ visited[start] = true;
+ list.offer(start);
+
+ while (!list.isEmpty()) {
+ int n = list.size(); // ๊ฐ์ ์๊ฐ์ ํ์ธํด์ผ ํ๋ ์์น ์์
+ for(int k=0;k=0&&dx<100001&&!visited[dx]) { // ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ํ์ ์ถ๊ฐ๊ฐ
+ list.offer(dx);
+ visited[dx]=true;
+ }
+ }
+ }
+ count++; // 1์ด ์ถ๊ฐ
+ }
+ }
+
+}
+
|