From d6134e62f751a4e5ff4d68b4b39a4cc346ecbdc2 Mon Sep 17 00:00:00 2001 From: KodaHye Date: Mon, 9 Dec 2024 11:34:05 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[CT]=20?= =?UTF-8?q?=EC=83=89=EA=B9=94=20=ED=8F=AD=ED=83=84=5F241209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...352円271円224円355円217円255円355円203円204円.java" | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 "CodeTree/2021-2022353円205円204円/DH_354円203円211円352円271円224円355円217円255円355円203円204円.java" diff --git "a/CodeTree/2021-2022353円205円204円/DH_354円203円211円352円271円224円355円217円255円355円203円204円.java" "b/CodeTree/2021-2022353円205円204円/DH_354円203円211円352円271円224円355円217円255円355円203円204円.java" new file mode 100644 index 00000000..7f94dfbc --- /dev/null +++ "b/CodeTree/2021-2022353円205円204円/DH_354円203円211円352円271円224円355円217円255円355円203円204円.java" @@ -0,0 +1,197 @@ +import java.io.*; +import java.util.*; + +public class DH_색깔폭탄 { + static class Point { + int r, c; + public Point(int r, int c) { + this.r = r; + this.c = c; + } + } + static int N, M, score; + static int[][] map; + static final int INF = Integer.MAX_VALUE; + static final int RED = -2, BLACK = -1, EMPTY = 0; + static int[] dr = {-1, 1, 0, 0}, dc = {0, 0, -1, 1}; + + public static void main(String[] args) throws Exception { + initInput(); + solution(); + System.out.println(score); + } + + static void solution() { + Deque bomb; + while((bomb = step1()).size()>= 2) { // 폭탄 묶음 찾기 + step2(bomb); // 폭탄 터지기 + step3(); // 중력 작용하기 + step4(); // 반시계 방향으로 90도 회전하기 + step3(); // 중력 작용하기 + } + } + + // 폭탄 묶음 찾기 + static Deque step1() { + Deque result = new ArrayDeque(); // 우선순위에 따라 폭탄이 터질 위치를 저장하는 큐 + Deque tmp = new ArrayDeque(); // bfs탐색했던 위치들을 모두 저장하는 큐 + Deque q = new ArrayDeque(); // bfs 탐색하는 큐 + + // 폭탄묶음의 크기, 빨간색 폭탄의 개수, + int groupSize = -INF, redCnt = INF; + + // 빨간색 폭탄은 bfs를 할 때마다 또 다시 사용할 수 있으므로 + // 따로 빨간색을 제외한 색깔 폭탄을 확인했는지 구분해주기 위해 bfs에서 사용하는 방문 배열 외에 또 다른 2차원 boolean 배열을 만들어줌 + boolean[][] checkColor = new boolean[N][N]; + + // bfs 탐색을 하는데, 우선순위에 따른 폭탄 묶음을 구하기 위해 + // r은 N - 1부터 시작하고, c는 0부터 시작함 + // 그리고 빨간 색이 아닌 다른 색깔 폭탄일 때 bfs 탐색 시작 + for(int r = N - 1; r>= 0; r--) { + for(int c = 0; c < N; c++) { + if(!isColor(map[r][c]) || checkColor[r][c]) continue; + + boolean[][] v = new boolean[N][N]; + int currentRedCnt = 0; // 현재 위치에서 폭탄 묶음을 구성할 때, 빨간 폭탄의 개수 + int currentSize = 1; // 현재 위치에서 폭탄 묶음을 구성할 때, 폭탄 묶음의 크기 + + tmp.clear(); + + q.add(new Point(r, c)); + tmp.add(new Point(r, c)); + + v[r][c] = true; + + while(!q.isEmpty()) { + Point current = q.poll(); + + for(int d = 0; d < 4; d++) { + int nr = current.r + dr[d]; + int nc = current.c + dc[d]; + + // 범위에 벗어났거나, 확인을 한 곳이거나, 돌이 있거나, 빈 공간이라면 continue + if(!check(nr, nc) || v[nr][nc] || map[nr][nc] == BLACK || map[nr][nc] == EMPTY) continue; + + // 빨간 폭탄도 아니고, 검정폭탄도 아닌데, 현재 자신의 색깔과 다른 경우 + if((map[nr][nc]> 0 && map[nr][nc] != map[r][c])) continue; + + // 빨간 폭탄일 경우 + if(map[nr][nc] == RED) currentRedCnt += 1; + + q.add(new Point(nr, nc)); + tmp.add(new Point(nr, nc)); + + v[nr][nc] = true; + currentSize += 1; + } + } + + // 폭탄 묶음 크기가 큰 폭탄부터 + if(groupSize < currentSize) { + result.clear(); + result.addAll(tmp); + + groupSize = currentSize; + redCnt = currentRedCnt; + } + // 폭탄 묶음 크기가 같다면, 빨간 폭탄의 개수 확인하기 + else if(groupSize == currentSize) { + if(currentRedCnt < redCnt) { + result.clear(); + result.addAll(tmp); + + groupSize = currentSize; + redCnt = currentRedCnt; + } + } + } + } + + return result; + } + + // 폭탄 터지기 + static void step2(Deque bomb) { + score += bomb.size() * bomb.size(); + + while(!bomb.isEmpty()) { + Point current = bomb.poll(); + map[current.r][current.c] = EMPTY; // 빈 공간으로 바꿔주기 + } + } + + // 중력 작용 + // 폭탄들이 있으면 큐에 넣어주고, 돌이 나온다면 gravity(기준선)을 기준으로 쌓아주기 + static void step3() { + int[][] tmp = new int[N][N]; + Deque q = new ArrayDeque(); + + for(int c = 0; c < N; c++) { + int gravity = N; + + for(int r = N - 1; r>= 0; r--) { + if(isBomb(map[r][c])) q.add(map[r][c]); + if(map[r][c] == BLACK) { + tmp[r][c] = BLACK; + while(!q.isEmpty()) tmp[--gravity][c] = q.poll(); + gravity = r; + } + } + + while(!q.isEmpty()) tmp[--gravity][c] = q.poll(); + } + + map = tmp; + } + + // 반시계 방향으로 회전 + // (r, c) -> (N - 1 - c, r) 로 바뀜 + static void step4() { + int[][] tmp = new int[N][N]; + for(int r = 0; r < N; r++) { + for(int c = 0; c < N; c++) { + tmp[N - 1 - c][r] = map[r][c]; + } + } + + map = tmp; + } + + static boolean check(int r, int c) { + return r>= 0 && r < N && c>= 0 && c < N; + } + + // 빨간색을 제외한 모든 색깔 폭탄 + static boolean isColor(int n) { + return n> 0 && n < M + 1; + } + + static boolean isBomb(int n) { + return isColor(n) || n == RED; + } + + static void printMapInfo() { + System.out.println("printMapInfo ---------------------"); + for(int r = 0; r < map.length; r++) { + System.out.println(Arrays.toString(map[r])); + } + } + + static void initInput() throws Exception { + System.setIn(new FileInputStream("./input/색깔폭탄.txt")); + 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][N]; + for(int r = 0; r < N; r++) { + st = new StringTokenizer(br.readLine()); + for(int c = 0; c < N; c++) { + map[r][c] = Integer.parseInt(st.nextToken()); + if(map[r][c] == 0) map[r][c] = RED; + } + } + } +} From ad1ccb5e46208f18b6c37ead9235ec29183f0ddc Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月10日 16:34:59 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[BOJ]=202294?= =?UTF-8?q?4=20=EC=A3=BD=EC=9D=8C=EC=9D=98=20=EB=B9=84=5F241210?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/20001-25000353円262円210円/DH_22944.java" | 111 ++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 "BOJ/20001-25000353円262円210円/DH_22944.java" diff --git "a/BOJ/20001-25000353円262円210円/DH_22944.java" "b/BOJ/20001-25000353円262円210円/DH_22944.java" new file mode 100644 index 00000000..3db9c695 --- /dev/null +++ "b/BOJ/20001-25000353円262円210円/DH_22944.java" @@ -0,0 +1,111 @@ +import java.io.*; +import java.util.*; + +/* + * 죽음의 비 + */ + +public class DH_22944 { + static int[] dr = {-1, 1, 0, 0}, dc = {0, 0, -1, 1}; + static class Point { + int k, r, c, d, p, u; + public Point(int k, int r, int c, int d, int p, int u) { + this.k = k; + this.r = r; + this.c = c; + this.d = d; + this.p = p; + this.u = u; + } + } + + static int N, H, D; + static char[][] map; + static boolean[][][] v; + static Deque q; + + public static void main(String[] args) throws Exception { + initInput(); + System.out.println(solution()); + } + + static int solution() { + int result = -1; + + while(!q.isEmpty()) { + Point current = q.poll(); + + if(map[current.r][current.c] == 'E') { + result = current.d; + break; + } + + for(int d = 0; d < 4; d++) { + int nr = current.r + dr[d]; + int nc = current.c + dc[d]; + int nk = current.k; + int np = current.p; + int nu = current.u; + + if(!check(nr, nc) || v[current.k][nr][nc]) continue; + + if(map[nr][nc] == '.') { + if(nu> 0) nu -= 1; + else np -= 1; + } + + // 우산이라면 + else if(map[nr][nc] == 'U') { + map[nr][nc] = '.'; + nu = D - 1; + nk = current.k + 1; + } + + if(np == 0) continue; + + v[current.k][nr][nc] = true; + q.add(new Point(nk, nr, nc, current.d + 1, np, nu)); + } + } + + return result; + } + + static boolean check(int r, int c) { + return r>= 0 && r < N && c>= 0 && c < N; + } + + static void initInput() throws Exception { + System.setIn(new FileInputStream("./input/BOJ22944.txt")); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + N = Integer.parseInt(st.nextToken()); // 한 변의 길이 + H = Integer.parseInt(st.nextToken()); // 현재 체력 + D = Integer.parseInt(st.nextToken()); // 우산의 내구도 + + q = new ArrayDeque(); + int uCnt = 0; + + int sr = 0, sc =0; + + map = new char[N][N]; + + for(int r = 0; r < N; r++) { + String s = br.readLine(); + map[r] = s.toCharArray(); + + for(int c = 0; c < N; c++) { + if(map[r][c] == 'S') { + sr = r; sc = c; + map[r][c] = '.'; + } + if(map[r][c] == 'U') uCnt += 1; + } + } + + v = new boolean[uCnt + 1][N][N]; + q.add(new Point(0, sr, sc, 0, H, 0)); + v[0][sr][sc] = true; + } +} From cfe5ffc1a37eebd0b9bd27dab250de185af77d9b Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月10日 16:37:32 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[SQL]=20Movi?= =?UTF-8?q?e=20Rating=5F241210?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "SQL/14354円243円274円354円260円250円/DH_Movie Rating.sql" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "SQL/14354円243円274円354円260円250円/DH_Movie Rating.sql" diff --git "a/SQL/14354円243円274円354円260円250円/DH_Movie Rating.sql" "b/SQL/14354円243円274円354円260円250円/DH_Movie Rating.sql" new file mode 100644 index 00000000..77811e56 --- /dev/null +++ "b/SQL/14354円243円274円354円260円250円/DH_Movie Rating.sql" @@ -0,0 +1,12 @@ +(SELECT b.NAME `results` + FROM MOVIERATING a LEFT JOIN USERS b ON a.USER_ID = b.USER_ID + GROUP BY a.USER_ID + ORDER BY COUNT(a.USER_ID) DESC, b.NAME ASC + LIMIT 1) +UNION ALL +(SELECT b.title `results` + FROM MOVIERATING a LEFT JOIN MOVIES b ON a.MOVIE_ID = b.MOVIE_ID + WHERE CREATED_AT LIKE '2020-02-%' + GROUP BY a.MOVIE_ID + ORDER BY AVG(a.RATING) DESC, b.TITLE ASC + LIMIT 1) \ No newline at end of file From 48d1f81ff35ef3c116d2b856c664d4f761b31a70 Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月11日 09:19:50 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[BOJ]=202029?= =?UTF-8?q?1=20=ED=8C=8C=EC=9D=BC=20=EC=A0=95=EB=A6=AC=5F241211?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/20001-25000353円262円210円/DH_20291.java" | 29 +++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 "BOJ/20001-25000353円262円210円/DH_20291.java" diff --git "a/BOJ/20001-25000353円262円210円/DH_20291.java" "b/BOJ/20001-25000353円262円210円/DH_20291.java" new file mode 100644 index 00000000..66e807c5 --- /dev/null +++ "b/BOJ/20001-25000353円262円210円/DH_20291.java" @@ -0,0 +1,29 @@ +import java.io.*; +import java.util.*; + +/* + * 파일 정리 + */ + +public class DH_20291 { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int N = Integer.parseInt(br.readLine()); + + TreeMap treeMap = new TreeMap(); + + for(int i = 0; i < N; i++) { + String s = br.readLine().split("\\.")[1]; + if(treeMap.containsKey(s)) treeMap.put(s, treeMap.get(s) + 1); + else treeMap.put(s, 1); + } + + StringBuilder sb = new StringBuilder(); + for(String key: treeMap.keySet()) { + sb.append(key).append(" ").append(treeMap.get(key)).append("\n"); + } + + System.out.println(sb); + } +} From 92f8cdb09291b18113c4841d83dc642e8d744421 Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月13日 02:03:13 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[PG]=2034021?= =?UTF-8?q?1=20=EC=B6=A9=EB=8F=8C=EC=9C=84=ED=97=98=20=EC=B0=BE=EA=B8=B0?= =?UTF-8?q?=5F241212?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Programmers/Level2/DH_340211.java | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 Programmers/Level2/DH_340211.java diff --git a/Programmers/Level2/DH_340211.java b/Programmers/Level2/DH_340211.java new file mode 100644 index 00000000..c4ee3403 --- /dev/null +++ b/Programmers/Level2/DH_340211.java @@ -0,0 +1,116 @@ +import java.util.*; + +/* + * 충돌위험 찾기 + */ + +class DH_340211 { + static class Point { + int r, c; + public Point(int r, int c) { + this.r = r; + this.c = c; + } + } + + static int[] dr = {0, 0, -1, 1}, dc = {-1, 1, 0, 0}; + static Point[][][] checkPoints; // bfs 경로를 역추적하기 위해 사용 + static HashSet[][][] dis; // dis[k][r][c]: k번째 routes에서 r, c 지점을 가는데, 거리가 몇인지 저장 + static boolean[][][] v; // v[k][r][c]: r, c 지점까지의 거리가 k일 때, 방문 했는지 확인 + static int result, routeDis; + + static int solution(int[][] points, int[][] routes) { + + checkPoints = new Point[routes.length][101][101]; + dis = new HashSet[routes.length][101][101]; + + for(int k = 0; k < dis.length; k++) { + for(int r = 0; r < dis[0].length; r++) { + for(int c = 0; c < dis[0][0].length; c++) dis[k][r][c] = new HashSet(); + } + } + + v = new boolean[20_000][101][101]; + + for(int i = 0; i < routes.length; i++) { + + // routes를 따라 갈 때, 총 길이가 몇인지 확인하기 위한 변수 + routeDis = 1; + + for(int g = 0; g < routes[i].length - 1; g++) { + int[] goal = points[routes[i][g + 1] - 1]; + int[] current = points[routes[i][g] - 1]; + // bfs는 목표 지점에서부터 시작지점으로 도달할 수 있도록 해야됨 + bfs(goal, current, i); + + // bfs지점을 역추적하면서 가야될 길을 최단거리로 가면서, 시작지점으로부터 거리가 몇인지 저장함 + back(current[0], current[1], goal[0], goal[1], i, routeDis); + } + } + + return result; + } + + // 목표지점에서부터 시작지점으로 bfs를 한 뒤에 + // bfs 경로를 역추적하면서, 시작 지점으로부터 목표지점까지 최단거리가 어떻게 되는지 확인하고 + // 시작지점으로부터 떨어진 거리를 저장함 + static void back(int r, int c, int er, int ec, int i, int d) { + + for(int k = 0; k < dis.length; k++) { + if(k == i) continue; + + if(dis[k][r][c].contains(d) && !v[d][r][c]) { + v[d][r][c] = true; + result += 1; + break; + } + } + + dis[i][r][c].add(d); + + if((r == er && c == ec) || checkPoints[i][r][c] == null) return; + int nr = checkPoints[i][r][c].r; + int nc = checkPoints[i][r][c].c; + + routeDis += 1; + back(nr, nc, er, ec, i, d + 1); + } + + // bfs를 통해 목표지점에서부터 시작지점으로 최단거리 탐색 + static void bfs(int[] g, int[] c, int i) { + + Deque q = new ArrayDeque(); + q.add(new Point(g[0], g[1])); + + boolean[][] v = new boolean[101][101]; + v[g[0]][g[1]] = true; + + while(!q.isEmpty()) { + Point current = q.poll(); + + if(current.r == c[0] && current.c == c[1]) return; + + for(int d = 0; d < 4; d++) { + int nr = current.r + dr[d]; + int nc = current.c + dc[d]; + + if(!isValid(nr, nc) || v[nr][nc]) continue; + + checkPoints[i][nr][nc] = new Point(current.r, current.c); + + q.add(new Point(nr, nc)); + v[nr][nc] = true; + } + } + } + + static boolean isValid(int r, int c) { + return r> 0 && r < 101 && c> 0 && c < 101; + } + + public static void main(String[] args) { + int[][] points = {{1, 1}, {1, 2}, {1, 3}}; + int[][] routes = {{2, 1}, {2, 3, 1}}; + System.out.println(solution(points, routes)); + } +} \ No newline at end of file From e4562341fa9d2cda184a739abbc555ffb4e64de4 Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月13日 14:58:00 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[PG]=2011866?= =?UTF-8?q?9=20=EB=93=B1=EC=82=B0=EC=BD=94=EC=8A=A4=20=EC=A0=95=ED=95=98?= =?UTF-8?q?=EA=B8=B0=5F241213?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Programmers/Level3/DH_118669.java | 109 ++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Programmers/Level3/DH_118669.java diff --git a/Programmers/Level3/DH_118669.java b/Programmers/Level3/DH_118669.java new file mode 100644 index 00000000..d482a463 --- /dev/null +++ b/Programmers/Level3/DH_118669.java @@ -0,0 +1,109 @@ +import java.util.*; + +/* + * 등산코스 정하기 + */ + +public class DH_118669 { + static class Node implements Comparable { + int e, w, intensity; + + public Node(int e, int w) { + this.e = e; + this.w = w; + } + + public Node(int e, int w, int intensity) { + this.e = e; + this.w = w; + this.intensity = intensity; + } + + @Override + public int compareTo(Node o) { + return Integer.compare(this.w, o.w); + } + } + + static ArrayList adj[]; + static final int INF = Integer.MAX_VALUE; + + static int[] solution(int n, int[][] paths, int[] gates, int[] summits) { + int[] answer = {INF, INF}; + + adj = new ArrayList[n + 1]; + for(int i = 0; i < adj.length; i++) adj[i] = new ArrayList(); + + // 간선리스트 만들어주기 + for(int[] path: paths) { + int i = path[0]; + int j = path[1]; + int w = path[2]; + + adj[i].add(new Node(j, w)); + adj[j].add(new Node(i, w)); + } + + // 산봉우리들을 저장하는 set. 결과 구할 때, 출입구의 크기대로 계산해야 되므로 treeset 이용 + TreeSet summitSet = new TreeSet(); + // 시작입구를 저장하는 set + HashSet gateSet = new HashSet(); + + for(int s: summits) summitSet.add(s); + for(int g: gates) gateSet.add(g); + + // 산봉우리들을 기준으로 bfs 시작 (출입구를 만날때까지 탐색) + for(int s: summitSet) bfs(n, s, gateSet, summitSet, answer); + return answer; + } + + static void bfs(int n, int s, HashSet gateSet, TreeSet summitSet, int[] answer) { + + boolean[] v = new boolean[n + 1]; + + PriorityQueue q = new PriorityQueue(); + + q.add(new Node(s, 0, 0)); + v[s] = true; + + int intensity = INF; + + while(!q.isEmpty()) { + Node current = q.poll(); + v[current.e] = true; + + // 출입구를 만났는데, intensity가 작다면 intensity 값 update 해주기 + if(gateSet.contains(current.e) && intensity> current.intensity) { + intensity = current.intensity; + break; + } + + // 다음 노드가 출입구가 되면 안됨 + for(Node next: adj[current.e]) { + if(summitSet.contains(next.e) || v[next.e]) continue; + q.add(new Node(next.e, next.w, Math.max(current.intensity, next.w))); + } + } + + if(answer[1]> intensity) { + answer[1] = intensity; + answer[0] = s; + } + } + + public static void main(String[] args) { + int n = 6; + int[][] paths = {{1, 2, 3}, + {2, 3, 5}, + {2, 4, 2}, + {2, 5, 4}, + {3, 4, 4}, + {4, 5, 3}, + {4, 6, 1}, + {5, 6, 1}}; + int[] gates = {1, 3}; + int[] summits = {5}; + + System.out.println(Arrays.toString(solution(n, paths, gates, summits))); + } +} From 8af9a2f048289ee6cc94280e9b66006fc6ac71db Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月13日 16:38:17 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[SQL]=20Rest?= =?UTF-8?q?aurant=20Growth=5F241212?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "SQL/14354円243円274円354円260円250円/DH_Restaurant Growth.sql" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "SQL/14354円243円274円354円260円250円/DH_Restaurant Growth.sql" diff --git "a/SQL/14354円243円274円354円260円250円/DH_Restaurant Growth.sql" "b/SQL/14354円243円274円354円260円250円/DH_Restaurant Growth.sql" new file mode 100644 index 00000000..cff10345 --- /dev/null +++ "b/SQL/14354円243円274円354円260円250円/DH_Restaurant Growth.sql" @@ -0,0 +1,8 @@ +SELECT visited_on, amount, ROUND(amount / 7, 2) `average_amount` +FROM ( + SELECT DISTINCT visited_on + , SUM(amount) OVER(ORDER BY visited_on RANGE BETWEEN INTERVAL 6 DAY PRECEDING AND CURRENT ROW) `amount` + , MIN(visited_on) OVER() min_date + FROM CUSTOMER + ) a +WHERE visited_on>= min_date + 6 From 6819f9c71b2b686d6113a0f601c5ed96ceb63ac0 Mon Sep 17 00:00:00 2001 From: KodaHye Date: 2024年12月14日 01:12:56 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EA=B3=A0=EB=8B=A4=ED=98=9C:=20[BOJ]=202018?= =?UTF-8?q?1=20=EA=BF=88=ED=88=B4=EA=BF=88=ED=8B=80=20=ED=98=B8=EC=84=9D?= =?UTF-8?q?=20=EC=95=A0=EB=B2=8C=EB=A0=88=20-=20=ED=9A=A8=EC=9C=A8?= =?UTF-8?q?=EC=84=B1=5F241211?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/20001-25000353円262円210円/DH_20181.java" | 40 +++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 "BOJ/20001-25000353円262円210円/DH_20181.java" diff --git "a/BOJ/20001-25000353円262円210円/DH_20181.java" "b/BOJ/20001-25000353円262円210円/DH_20181.java" new file mode 100644 index 00000000..d832e590 --- /dev/null +++ "b/BOJ/20001-25000353円262円210円/DH_20181.java" @@ -0,0 +1,40 @@ +import java.io.*; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class DH_20181 { + 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[] arr = new int[N + 1]; + long[] dp = new long[N + 1]; + + st = new StringTokenizer(br.readLine()); + + for(int i = 0; i < N; i++) arr[i] = Integer.parseInt(st.nextToken()); + + long sum = 0, tmp = 0, result = 0; + int s = 0, e = 0; + + // dp[i]: i 지점까지 최선을 다했을 때, 얻을 수 있는 점수 + while(e < N + 1) { + if(sum>= K) { + tmp = s == 0 ? 0: Math.max(tmp, dp[s - 1]); + // tmp + sum - K + // : (s전까지 최선을 다했을 때, 얻을 수 있는 점수) + (s ~ e까지 합계) - K + // else 부분에서 e++가 되었으므로 dp[e - 1]을 해줘서 sum을 한 범위까지 확인할 수 있도록 함 + dp[e - 1] = Math.max(dp[e - 1], tmp + sum - K); + result = Math.max(result, dp[e - 1]); + sum -= arr[s++]; + + } else { + sum += arr[e++]; + } + } + System.out.println(result); + } +}

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