From bb37c8942eea9f19fc039996859d82f9938e64d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=84=B8=EA=B6=8C?= Date: Fri, 3 Feb 2023 12:25:45 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EC=BB=A8=EB=B2=A0=EC=9D=B4=EC=96=B4=20?= =?UTF-8?q?=EB=B2=A8=ED=8A=B8=20=EC=9C=84=EC=9D=98=20=EB=A1=9C=EB=B4=87=5F?= =?UTF-8?q?=EC=A0=95=EC=84=B8=EA=B6=8C:=20=EC=8B=A4=ED=8C=A8=E3=85=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\240\225\354\204\270\352\266\214.java" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "common/boj/wk2-1_\354\273\250\353\262\240\354\235\264\354\226\264 \353\262\250\355\212\270 \354\234\204\354\235\230 \353\241\234\353\264\207_BOJ20055/\354\273\250\353\262\240\354\235\264\354\226\264\353\262\250\355\212\270\354\234\204\354\235\230\353\241\234\353\264\207_\354\240\225\354\204\270\352\266\214.java" diff --git "a/common/boj/wk2-1_\354\273\250\353\262\240\354\235\264\354\226\264 \353\262\250\355\212\270 \354\234\204\354\235\230 \353\241\234\353\264\207_BOJ20055/\354\273\250\353\262\240\354\235\264\354\226\264\353\262\250\355\212\270\354\234\204\354\235\230\353\241\234\353\264\207_\354\240\225\354\204\270\352\266\214.java" "b/common/boj/wk2-1_\354\273\250\353\262\240\354\235\264\354\226\264 \353\262\250\355\212\270 \354\234\204\354\235\230 \353\241\234\353\264\207_BOJ20055/\354\273\250\353\262\240\354\235\264\354\226\264\353\262\250\355\212\270\354\234\204\354\235\230\353\241\234\353\264\207_\354\240\225\354\204\270\352\266\214.java" new file mode 100644 index 0000000..267a3c3 --- /dev/null +++ "b/common/boj/wk2-1_\354\273\250\353\262\240\354\235\264\354\226\264 \353\262\250\355\212\270 \354\234\204\354\235\230 \353\241\234\353\264\207_BOJ20055/\354\273\250\353\262\240\354\235\264\354\226\264\353\262\250\355\212\270\354\234\204\354\235\230\353\241\234\353\264\207_\354\240\225\354\204\270\352\266\214.java" @@ -0,0 +1,76 @@ +package study.ssafy.bundler; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class 컨베이어벨트위의로봇_정세권 { + + static int N, K, M, duCunt, cycle; + static int[] belt, robot; + + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + M = 2*N; + belt = new int[M]; + robot = new int[N]; + + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < M; i++) + belt[i] = Integer.parseInt(st.nextToken()); + + while (duCunt < K) { + setRobot(); + moveBelt(); + moveRobot(); + ++cycle; + } + + System.out.println(cycle); + + + System.out.println(Arrays.toString(belt)); + + + } + + private static void setRobot() { + if (belt[0] != 0) { + robot[0] = 1; + belt[0] -= 1; + if (belt[0] == 0) ++duCunt; + } + } + + private static void moveBelt() { + // belt만 돌리기 + int beltLast = belt[M-1]; + for (int i = M-1; i > 0; i--) + belt[i] = belt[i-1]; + belt[0] = beltLast; + + // 로봇만 돌리기 + for (int i = N-1; i > 0; i--) + robot[i] = robot[i-1]; + robot[N-1] = 0; + } + + private static void moveRobot() { + for (int i = N-2; i >0; i--) { + if (robot[i] == 0 || belt[i+1] == 0) continue; + robot[i+1] = robot[i]; + belt[i+1] -= 1; + if (belt[i+1] == 0) --duCunt; + } + robot[N-1] = 0; + } + +} From 80ed797a305f4d18f09d8cdcb7645fb16e367792 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=84=B8=EA=B6=8C?= Date: Fri, 3 Feb 2023 12:31:36 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EA=B3=A0=EC=B8=B5=20=EA=B1=B4=EB=AC=BC=5F?= =?UTF-8?q?=EC=A0=95=EC=84=B8=EA=B6=8C:=2076ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\240\225\354\204\270\352\266\214.java" | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 "common/boj/wk2-2_\352\263\240\354\270\265 \352\261\264\353\254\274_BOJ1027/\355\225\230\353\212\230\354\227\220\354\204\234\353\263\204\353\230\245\353\263\204\354\235\264\353\271\227\353\260\234\354\271\234\353\213\244_\354\240\225\354\204\270\352\266\214.java" diff --git "a/common/boj/wk2-2_\352\263\240\354\270\265 \352\261\264\353\254\274_BOJ1027/\355\225\230\353\212\230\354\227\220\354\204\234\353\263\204\353\230\245\353\263\204\354\235\264\353\271\227\353\260\234\354\271\234\353\213\244_\354\240\225\354\204\270\352\266\214.java" "b/common/boj/wk2-2_\352\263\240\354\270\265 \352\261\264\353\254\274_BOJ1027/\355\225\230\353\212\230\354\227\220\354\204\234\353\263\204\353\230\245\353\263\204\354\235\264\353\271\227\353\260\234\354\271\234\353\213\244_\354\240\225\354\204\270\352\266\214.java" new file mode 100644 index 0000000..d40eb2d --- /dev/null +++ "b/common/boj/wk2-2_\352\263\240\354\270\265 \352\261\264\353\254\274_BOJ1027/\355\225\230\353\212\230\354\227\220\354\204\234\353\263\204\353\230\245\353\263\204\354\235\264\353\271\227\353\260\234\354\271\234\353\213\244_\354\240\225\354\204\270\352\266\214.java" @@ -0,0 +1,120 @@ +package study.ssafy.bundler; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +/* + * [결과] SUCCESS + * + * [상태] 구글링 함^^ + * + * [접근] (1) 완탐으로 문제 품 -> 메모리 초과 + * (2) Map을 -> bar -> comp : 압축 하여 풀었음 -> 메모리 초과 + * => 원래 map 자체가 너무 커서 메모리 초과가 난걸로 유추 중.. + * (3) Star의 좌표 기준으로 3중 for문으로 품 -> + */ + +public class 하늘에서별똥별이빗발친다_정세권 { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); // 구역 가로 길이 + int M = Integer.parseInt(st.nextToken()); // 구역 세로 길이 + int L = Integer.parseInt(st.nextToken()); // 정사각형 트램펄린 한 변의 길이 + int K = Integer.parseInt(st.nextToken()); // 별똥별의 수 + + int[][] star = new int[K][2]; + + // 별의 좌표 값을 저장 하는 2차 배열 + int x = 0, y = 0; + for (int i = 0; i < K; i++) { + st = new StringTokenizer(br.readLine()); + x = Integer.parseInt(st.nextToken()); + y = Integer.parseInt(st.nextToken()); + star[i][0] = x; + star[i][1] = y; + } + + + // (1) 완탐 -> 메모리 초과 +// while(width <= N-L) { // 가로의 최대 길이 +// while(height <= M-L) { // 세로의 최대 길이 +// +// for (int i = width; i <= width+L; i++) { +// for (int j = height; j <= height+L; j++) { +// if (map[i][j] == 0) continue; +// tempStar++; +// } +// } // 트램펄린 한바퀴를 돌았을때 막는 Star의 수 = tempStar +// +// maxStar = (maxStar>tempStar)? maxStar: tempStar; // 트램펄린을 구역의 지도별로 탐색했을때, 가장 별을 많이 막은 갯수로 갱신 +// tempStar = 0; // 해당 트램펄린 막은 별의 갯수 0으로 초기화 +// ++height; // 세로 1 증가 +// } +// height = 0; // 높이 0으로 초기화 +// ++width; // 가로 1 증가 +// } + + + // (2) map -> bar -> comp -> 메모리 초과 +// int temp = 0; +// for (int j = 0; j <= N; j++) { +// for (int i = 0; i <= L; i++) { +// temp += map[i][j]; +// } +// bar[0][j] = temp; +// temp = 0; +// } +// +// for (int i = 1; i <= M-L; i++) { +// for (int j = 0; j <= N; j++) { +// bar[i][j] = bar[i-1][j] + map[i+L][j] - map[i-1][j]; +// } +// } +// +// temp = 0; +// for (int i = 0; i <= M-L; i++) { +// for (int j = 0; j <= L; j++) { +// temp += bar[i][j]; +// } +// comp[i][0] = temp; +// temp = 0; +// maxStar = (maxStar > comp[i][0])? maxStar: comp[i][0]; +// } +// +// for (int i = 0; i <= M-L; i++) { +// for (int j = 1; j <= N-L; j++) { +// comp[i][j] = comp[i][j-1] + bar[i][j+L] - bar[i][j-1]; +// maxStar = (maxStar > comp[i][j])? maxStar: comp[i][j]; +// } +// } + + // (3) star 좌표 기준으로 완탐 -> 별의 x좌표와 y좌표를 이중 for문으로 탐색하여 그 안에서 +L방향의 트램펄린 안에 포함되는 star의 갯수 count + int maxStar = 0; + int tempStar = 0; + int starX = 0, starY = 0; + for (int i = 0; i < K; i++) { // star의 x좌표 분해 + for (int j = 0; j < K; j++) { // star의 y좌표 분해 -> 즉, x와 y의 수직 좌표의 교차점을 모두 구함 + x = star[i][0]; + y = star[j][1]; + tempStar = 0; + + for (int l = 0; l < K; l++) { // 좌표의 교차점을 모두 구했으므로 트램펄린 양의 방향 +L만 고려하면 됨 + starX = star[l][0]; + starY = star[l][1]; + if (x<=starX && starX<=x+L && y<=starY && starY<=y+L) tempStar++; // +L의 방향으로 포함되는 별의 갯수 카운팅 + } + maxStar = (maxStar > tempStar)? maxStar: tempStar; // 최댓값 매번 갱신 + } + } + + System.out.println(K-maxStar); + } + +} From bf898b0f3d28827f221daee4f460b9c0ff2fb3b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=84=B8=EA=B6=8C?= Date: Fri, 10 Feb 2023 09:21:04 +0900 Subject: [PATCH 3/3] =?UTF-8?q?=EC=95=8C=ED=8C=8C=EB=B2=B3=5F=EC=A0=95?= =?UTF-8?q?=EC=84=B8=EA=B6=8C=20812ms=2012324KB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\240\225\354\204\270\352\266\214.java" | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 "common/boj/wk3_2_\354\225\214\355\214\214\353\262\263_BOJ1987/\354\225\214\355\214\214\353\262\263_\354\240\225\354\204\270\352\266\214.java" diff --git "a/common/boj/wk3_2_\354\225\214\355\214\214\353\262\263_BOJ1987/\354\225\214\355\214\214\353\262\263_\354\240\225\354\204\270\352\266\214.java" "b/common/boj/wk3_2_\354\225\214\355\214\214\353\262\263_BOJ1987/\354\225\214\355\214\214\353\262\263_\354\240\225\354\204\270\352\266\214.java" new file mode 100644 index 0000000..78996f4 --- /dev/null +++ "b/common/boj/wk3_2_\354\225\214\355\214\214\353\262\263_BOJ1987/\354\225\214\355\214\214\353\262\263_\354\240\225\354\204\270\352\266\214.java" @@ -0,0 +1,75 @@ +package study.ssafy.bundler; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Main_알파벳_정세권 { + + static int R, C; + static char[][] map; + + static int cnt, maxCnt; + static boolean[] visited = new boolean[91]; // A = 65, Z = 90 + + static int[] dr = {-1, 0, 1, 0}; + static int[] dc = {0, 1, 0, -1}; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + // 기본 값 받기 + st = new StringTokenizer(br.readLine()); + R = Integer.parseInt(st.nextToken()); // row 값 + C = Integer.parseInt(st.nextToken()); // column 값 + map = new char[R][C]; + + // 알파벳 배열 받기 + for (int i = 0; i < R; i++) { + char[] temp = br.readLine().toCharArray(); + for (int j = 0; j < C; j++) { + map[i][j] = temp[j]; + } + } + + + // main logic + cnt = 1; + visited[map[0][0]+0] = true; // map[0][0] 위치 방문 처리 + + bfs(0, 0); // bfs 탐색 + + // 가장 긴 배열 출력 + System.out.println(maxCnt); + + } + + // 메인 bfs logic + private static void bfs(int row, int col) { + // 최댓값 갱신 + maxCnt = maxCnt > cnt? maxCnt: cnt; + + // 4방 탐색 + for (int i = 0; i < 4; i++) { + int nextR = row + dr[i]; + int nextC = col + dc[i]; + + // 경계 조건 처리 : (1) 경계 외 값 (2) 이미 방문한 문자 제외 + if (nextR < 0 || nextR >= R || nextC < 0 || nextC >=C + ||visited[map[nextR][nextC]+0]) continue; + + // 방문 처리, cnt 1 증가 + visited[map[nextR][nextC]+0] = true; + ++cnt; + + // bfs + bfs(nextR, nextC); + + // 미방문 처리, cnt 1 감소 + visited[map[nextR][nextC]+0] = false; + --cnt; + } + } +}