From 143350dda6c4066e66baa97a7b59df1d33327d30 Mon Sep 17 00:00:00 2001 From: yeahdy Date: Tue, 22 Oct 2024 15:42:47 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[CT]=20=EC=8B=9C=EA=B3=B5=EC=9D=98=20?= =?UTF-8?q?=EB=8F=8C=ED=92=8D=5F241021?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...354\235\230_\353\217\214\355\222\215.java" | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 "CodeTree/2019-2020\353\205\204/YJ_\354\213\234\352\263\265\354\235\230_\353\217\214\355\222\215.java" diff --git "a/CodeTree/2019-2020\353\205\204/YJ_\354\213\234\352\263\265\354\235\230_\353\217\214\355\222\215.java" "b/CodeTree/2019-2020\353\205\204/YJ_\354\213\234\352\263\265\354\235\230_\353\217\214\355\222\215.java" new file mode 100644 index 00000000..63f05c70 --- /dev/null +++ "b/CodeTree/2019-2020\353\205\204/YJ_\354\213\234\352\263\265\354\235\230_\353\217\214\355\222\215.java" @@ -0,0 +1,180 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.Queue; + +public class YJ_시공의_돌풍 { + static class Dust{ + int x; + int y; + int data; + + Dust(int x, int y, int data){ + this.x = x; + this.y = y; + this.data = data; + } + } + + static int[][] room; + static int[][] temp; + static boolean[][] visited; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] data = br.readLine().split("\\s"); + int n = Integer.parseInt(data[0]); + int m = Integer.parseInt(data[1]); + int t = Integer.parseInt(data[2]); + + visited = new boolean[n][m]; + room = new int[n][m]; + int[] tornado = new int[2]; + int z = 0; + for(int i=0; i 0){ + //먼지가 인접한 4방향의 상하좌우 칸으로 확산: bfs 너비탐색 + bfs(n,m); + //시공의 돌풍이 청소를 시작 + goTornado(n,m,tornado); + //확산된 먼지 합산 + result = calculateTotalDust(n,m); + } + System.out.println(result); + } + + static void bfs(int n, int m){ + final int SPREAD = 5; + Queue queue = new LinkedList<>(); + int[] nx = {1,0,-1,0}; + int[] ny = {0,1,0,-1}; + + temp = new int[n][m]; + queue.offer(new Dust(0,0,room[0][0])); + + while(!queue.isEmpty()){ + Dust dust = queue.poll(); + int share = dust.data/SPREAD; + + int currX = dust.x; + int currY = dust.y; + if(visited[currX][currY]){ + continue; + } + + for(int i=0; i<4; i++){ + int x = currX + nx[i]; + int y = currY + ny[i]; + + if(stop(x,y,n,m)){ + continue; + } + int next = room[x][y]; + if(next == -1){ + continue; + } + + temp[x][y] += share; + room[currX][currY] -= share; + queue.offer(new Dust(x,y,next)); + } + visited[currX][currY] = true; + } + + sumDust(n,m); + } + + private static boolean stop(int x, int y, int n, int m){ + return x<0 || y<0 || x>=n || y>=m; + } + + private static void sumDust(int n, int m){ + for(int x=0; xstartC; c--){ + room[endR][c] = room[endR][c-1]; + } + //맨왼쪽 줄 ↓ + for(int r = endR; r>startR; r--){ + room[r][startR] = room[r-1][startR]; + } + room[startR+1][startC] = corner; + } + + // 아랫태풍r,0,끝r,끝c + private static void down(int startR, int startC, int endR, int endC){ + int corner = room[startR][startC]; + //맨왼쪽 줄 ↓ + for(int r = startR; rstartR; r--){ + room[r][endC] = room[r-1][endC]; + } + //맨윗쪽 줄 → + for(int c = endC; c>startC; c--){ + room[startR][c] = room[startR][c-1]; + } + room[startR][startC+1] = corner; + } + + private static void cleaning(int[] tornado){ + room[tornado[0]][0] = -1; + room[tornado[1]][0] = -1; + room[tornado[0]][1] = 0; + room[tornado[1]][1] = 0; + } + + static int calculateTotalDust(int n, int m){ + int result = 0; + for(int x=0; x Date: Tue, 22 Oct 2024 16:48:42 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[SQL]=20=EC=9E=85=EC=96=91=20=EC=8B=9C?= =?UTF-8?q?=EA=B0=81=20=EA=B5=AC=ED=95=98=EA=B8=B0(2)=5F241022?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\352\265\254\355\225\230\352\270\260(2).sql" | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 "SQL/07\354\243\274\354\260\250/YJ_\354\236\205\354\226\221 \354\213\234\352\260\201 \352\265\254\355\225\230\352\270\260(2).sql" diff --git "a/SQL/07\354\243\274\354\260\250/YJ_\354\236\205\354\226\221 \354\213\234\352\260\201 \352\265\254\355\225\230\352\270\260(2).sql" "b/SQL/07\354\243\274\354\260\250/YJ_\354\236\205\354\226\221 \354\213\234\352\260\201 \352\265\254\355\225\230\352\270\260(2).sql" new file mode 100644 index 00000000..599eb431 --- /dev/null +++ "b/SQL/07\354\243\274\354\260\250/YJ_\354\236\205\354\226\221 \354\213\234\352\260\201 \352\265\254\355\225\230\352\270\260(2).sql" @@ -0,0 +1,17 @@ +-- https://school.programmers.co.kr/learn/courses/30/lessons/59413 +-- 0시부터 23시까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회 +WITH RECURSIVE time_h AS ( + SELECT 0 AS HOUR_DATA + UNION ALL + SELECT HOUR_DATA+1 + FROM time_h + WHERE HOUR_DATA < 23 +) +SELECT + th.HOUR_DATA AS HOUR + ,COUNT(DISTINCT ao.ANIMAL_ID) AS COUNT +FROM time_h th + LEFT JOIN ANIMAL_OUTS ao + ON th.HOUR_DATA = HOUR(ao.DATETIME) +GROUP BY th.HOUR_DATA +ORDER BY th.HOUR_DATA; \ No newline at end of file From 369f649f4c51332646b5c3c8e9329fa370ad8e89 Mon Sep 17 00:00:00 2001 From: yeahdy Date: Wed, 23 Oct 2024 00:58:02 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[BOJ]=205021=20=EC=99=95=EC=9C=84=20?= =?UTF-8?q?=EA=B3=84=EC=8A=B9=5F241022?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/5001-10000\353\262\210/YJ_5021.java" | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 "BOJ/5001-10000\353\262\210/YJ_5021.java" diff --git "a/BOJ/5001-10000\353\262\210/YJ_5021.java" "b/BOJ/5001-10000\353\262\210/YJ_5021.java" new file mode 100644 index 00000000..62df329f --- /dev/null +++ "b/BOJ/5001-10000\353\262\210/YJ_5021.java" @@ -0,0 +1,71 @@ +import java.io.*; +import java.util.*; + +public class YJ_5021 { + static Map> families = new HashMap<>(); //<자식,자식의부모 리스트> + static Map bloodRatio = new HashMap<>(); //<계승후보,혈통비율> + + public static void main(String[] args) throws IOException{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] data = br.readLine().split("\\s"); + final int N = Integer.parseInt(data[0]); + final int M = Integer.parseInt(data[1]); + + final String king = br.readLine(); + for(int i=0; i new ArrayList<>()); + String dad = family[1]; + String mom = family[2]; + families.get(child).add(dad); + families.get(child).add(mom); + + //모든 사람들 혈통 1 초기화 + bloodRatio.put(child, 1.0); + bloodRatio.put(dad, 1.0); + bloodRatio.put(mom, 1.0); + } + //왕은 최상위 혈통으로 0 + bloodRatio.put(king, 0.0); + + //후보자 별로 혈통 계산하기 + for(String name : bloodRatio.keySet()){ + findAnHeir(name); + } + + //계승자 찾기 + String nextKing = br.readLine(); + for(int i=1; i parent = families.get(name); + //왕족이 아닌 부모는 상위 부모가 없음 + if(Objects.isNull(parent)){ + bloodRatio.put(name,-1.0); + return bloodRatio.get(name); + } + //깊이 탐색을 통해 자식의 부모로 올라가면서 현재 자식의 혈통을 계산 + double dad = findAnHeir(parent.get(0)); + double mom = findAnHeir(parent.get(1)); + + //모든 사람은 아버지의 혈통과 어머니의 혈통을 반 씩 받게 된다 + //dfs 탐색이 깊어질수록 혈통이 옅어짐 (1/2 > 1/4 > 1/16 ...) + bloodRatio.put(name,(dad+mom)/2.0); + + return bloodRatio.get(name); + } +} From 9cd5807950da7d7d373515bcd11f39e57c8e22b2 Mon Sep 17 00:00:00 2001 From: yeahdy Date: Wed, 23 Oct 2024 10:53:52 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[PG]=2049993=20=EC=8A=A4=ED=82=AC=ED=8A=B8?= =?UTF-8?q?=EB=A6=AC=5F241023?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Programmers/Level2/YJ_49993.java | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Programmers/Level2/YJ_49993.java diff --git a/Programmers/Level2/YJ_49993.java b/Programmers/Level2/YJ_49993.java new file mode 100644 index 00000000..df1251ce --- /dev/null +++ b/Programmers/Level2/YJ_49993.java @@ -0,0 +1,38 @@ +import java.util.*; + +public class YJ_49993 { + public static void main(String[] args) { + String skill = "CBD"; + String[] skill_trees = {"BACDE", "CBADF", "AECB", "BDA"}; + + int answer = 0; + Map skillMap = new HashMap<>(); + for(int i=0; i Date: Thu, 24 Oct 2024 10:51:43 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[BOJ]=2021939=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=B6=94=EC=B2=9C=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20Version=201?= =?UTF-8?q?=5F241023?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/20001-25000\353\262\210/YJ_21939.java" | 63 +++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 "BOJ/20001-25000\353\262\210/YJ_21939.java" diff --git "a/BOJ/20001-25000\353\262\210/YJ_21939.java" "b/BOJ/20001-25000\353\262\210/YJ_21939.java" new file mode 100644 index 00000000..d52fe75c --- /dev/null +++ "b/BOJ/20001-25000\353\262\210/YJ_21939.java" @@ -0,0 +1,63 @@ +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Scanner; +import java.util.TreeMap; +import java.util.TreeSet; + +public class YJ_21939 { + static TreeMap> workbook = new TreeMap<>(); //<난이도,문제번호> + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + int N = scanner.nextInt(); + for (int i = 0; i < N; i++) { + int number = scanner.nextInt(); + int difficulty = scanner.nextInt(); + workbook.computeIfAbsent(difficulty, set -> new TreeSet<>()) + .add(number); + } + + while (scanner.hasNext()) { + String say = scanner.next(); + switch (say) { + case "recommend": + recommend(scanner.nextInt()); + break; + case "add": + add(scanner.nextInt(), scanner.nextInt()); + break; + case "solved": + solved(scanner.nextInt()); + break; + } + } + + scanner.close(); + } + + static void recommend(int difficulty) { + if (difficulty == 1) { + System.out.println(workbook.lastEntry().getValue().last()); + } else { + System.out.println(workbook.firstEntry().getValue().first()); + } + } + + static void add(int number, int difficulty) { + workbook.computeIfAbsent(difficulty, set -> new TreeSet<>()) + .add(number); + } + + static void solved(int number) { + Iterator>> iterator = workbook.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry> entry = iterator.next(); + if (entry.getValue().remove(number)) { + if (entry.getValue().isEmpty()) { + iterator.remove(); + } + return; + } + } + } +} From 33f678af85f3d4f94f6d684d5421eee429510935 Mon Sep 17 00:00:00 2001 From: yeahdy Date: Thu, 24 Oct 2024 21:35:56 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[SQL]=20=EC=97=B0=EA=B0=84=20=ED=8F=89?= =?UTF-8?q?=EA=B0=80=EC=A0=90=EC=88=98=EC=97=90=20=ED=95=B4=EB=8B=B9?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=ED=8F=89=EA=B0=80=20=EB=93=B1=EA=B8=89=20?= =?UTF-8?q?=EB=B0=8F=20=EC=84=B1=EA=B3=BC=EA=B8=88=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EA=B8=B0=5F241024?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\355\232\214\355\225\230\352\270\260.sql" | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 "SQL/07\354\243\274\354\260\250/YJ_\354\227\260\352\260\204 \355\217\211\352\260\200\354\240\220\354\210\230\354\227\220 \355\225\264\353\213\271\355\225\230\353\212\224 \355\217\211\352\260\200 \353\223\261\352\270\211 \353\260\217 \354\204\261\352\263\274\352\270\210 \354\241\260\355\232\214\355\225\230\352\270\260.sql" diff --git "a/SQL/07\354\243\274\354\260\250/YJ_\354\227\260\352\260\204 \355\217\211\352\260\200\354\240\220\354\210\230\354\227\220 \355\225\264\353\213\271\355\225\230\353\212\224 \355\217\211\352\260\200 \353\223\261\352\270\211 \353\260\217 \354\204\261\352\263\274\352\270\210 \354\241\260\355\232\214\355\225\230\352\270\260.sql" "b/SQL/07\354\243\274\354\260\250/YJ_\354\227\260\352\260\204 \355\217\211\352\260\200\354\240\220\354\210\230\354\227\220 \355\225\264\353\213\271\355\225\230\353\212\224 \355\217\211\352\260\200 \353\223\261\352\270\211 \353\260\217 \354\204\261\352\263\274\352\270\210 \354\241\260\355\232\214\355\225\230\352\270\260.sql" new file mode 100644 index 00000000..f2b31cd0 --- /dev/null +++ "b/SQL/07\354\243\274\354\260\250/YJ_\354\227\260\352\260\204 \355\217\211\352\260\200\354\240\220\354\210\230\354\227\220 \355\225\264\353\213\271\355\225\230\353\212\224 \355\217\211\352\260\200 \353\223\261\352\270\211 \353\260\217 \354\204\261\352\263\274\352\270\210 \354\241\260\355\232\214\355\225\230\352\270\260.sql" @@ -0,0 +1,27 @@ +-- https://school.programmers.co.kr/learn/courses/30/lessons/284528 +SELECT + hem.EMP_NO, + hem.EMP_NAME, + CASE + WHEN sub.average >= 96 THEN 'S' + WHEN sub.average >= 90 THEN 'A' + WHEN sub.average >= 80 THEN 'B' + ELSE 'C' + END AS GRADE, + CASE + WHEN sub.average >= 96 THEN hem.SAL*0.2 + WHEN sub.average >= 90 THEN hem.SAL*0.15 + WHEN sub.average >= 80 THEN hem.SAL*0.1 + ELSE 0 + END AS BONUS +FROM HR_EMPLOYEES hem +INNER JOIN ( + SELECT + hg.EMP_NO, + SUM(hg.SCORE)/2 AS average + FROM HR_GRADE hg + INNER JOIN HR_EMPLOYEES he + ON hg.EMP_NO = he.EMP_NO + GROUP BY hg.EMP_NO +) sub +ON hem.EMP_NO = sub.EMP_NO \ No newline at end of file From e1c101385dee8550501c812ee2a02d2b48a072bf Mon Sep 17 00:00:00 2001 From: yeahdy Date: Fri, 25 Oct 2024 18:30:50 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[BOJ]=201535=20=EC=95=88=EB=85=95=5F241025?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-10000\353\262\210/YJ_1535.java" | 33 +++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "BOJ/1000-10000\353\262\210/YJ_1535.java" diff --git "a/BOJ/1000-10000\353\262\210/YJ_1535.java" "b/BOJ/1000-10000\353\262\210/YJ_1535.java" new file mode 100644 index 00000000..cb27b12a --- /dev/null +++ "b/BOJ/1000-10000\353\262\210/YJ_1535.java" @@ -0,0 +1,33 @@ +import java.io.*; + +public class YJ_1535 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + + String[] s = br.readLine().split("\\s"); + String[] h = br.readLine().split("\\s"); + int[] exhaustion = new int[N+1]; + int[] happy = new int[N+1]; + + for(int i=1; i 0; stamina--) { //뒤에서 부터 특정 체력에 대한 기쁨을 갱신하면서 반복 + int total = stamina-exhaustion[i]; //현재 체력에서 체력소모를 빼서 현재 상태에서 가능한 상황을 고려 + if (total > 0) { + dp[stamina] = Math.max(dp[stamina], dp[total] + happy[i]); //"이미 갱신된 기쁨" vs "현재 체력소모를 포함하기 위해 이전 상태의 기쁨 + 현재 기쁨"을 비교하기 + //System.out.printf("dp[%d] = Math.max(dp[%d], dp[%d]+happy[%d])\n", stamina, stamina, total , i); + //System.out.printf("%d = Math.max(%d, %d)\n\n", dp[stamina], dp[stamina], dp[total] + happy[i]); + } + } + } + + System.out.println(dp[MAX_STAMINA]); //최대체력인 dp[100]은 항상 최대기쁨 값이 보장된다 + } +} From 9270765557d3404cba30f2b8ebfc214906821963 Mon Sep 17 00:00:00 2001 From: yeahdy Date: Sat, 26 Oct 2024 00:31:02 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[BOJ]=202073=20=EC=88=98=EB=8F=84=EB=B0=B0?= =?UTF-8?q?=EA=B4=80=EA=B3=B5=EC=82=AC=5F241026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/YJ_2073.java" | 31 ++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/YJ_2073.java" diff --git "a/BOJ/1000-5000\353\262\210/YJ_2073.java" "b/BOJ/1000-5000\353\262\210/YJ_2073.java" new file mode 100644 index 00000000..8ad4608f --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/YJ_2073.java" @@ -0,0 +1,31 @@ +import java.io.*; + +public class YJ_2073 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] DP = br.readLine().split("\\s"); + int D = Integer.parseInt(DP[0]); + int P = Integer.parseInt(DP[1]); + + int[] length = new int[P]; + int[] capacity = new int[P]; + for(int i=0; i=length[i]; distance--){ + //특정 거리에 만들 수 있는 수도관(여러 파이프들로 구성) 중 가장 큰 용량 구하기 + dp[distance] = Math.max(dp[distance], Math.min(capacity[i],dp[distance-length[i]])); + } + } + + System.out.println(dp[D]); + } +} \ No newline at end of file