From 6f400fc4c21ef5fb8eb2fdbcf4dc7749a9353eb3 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Mon, 16 Dec 2024 10:15:42 +0900 Subject: [PATCH 01/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[CT]=20?= =?UTF-8?q?=EC=9C=B7=EB=86=80=EC=9D=B4=20=EC=82=AC=EA=B8=B0=EB=8B=A8=5F241?= =?UTF-8?q?216?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\202\254\352\270\260\353\213\250.java" | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 "CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" diff --git "a/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" "b/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" new file mode 100644 index 00000000..be52eeff --- /dev/null +++ "b/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" @@ -0,0 +1,88 @@ +import java.util.*; +import java.io.*; + +// 미리 계산을 하여 주어진 이동 횟수에 나갈 말의 종류를 잘 조합하여 얻을 수 있는 점수의 최댓값 +// 주어진 이동 칸 수를 이용해서 얻을 수 있는 점수의 최댓값을 출력 +// 파란 칸에 도착 시 최대 이동 횟수 이동하기 +public class HW_윷놀이_사기단 { + static int[] board = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, + 13, 16, 19, 22, 24, 28, 27, 26, 25, 30, 35, 0}; // 32칸 + static int[] horse = {0, 0, 0, 0}; // 말 4개 + static int[][] move = new int[33][6]; // 말의 이동 경로 저장 + static int max = 0; + static int[] input; + public static void main(String[] args) throws IOException{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + input = new int[10]; + + for(int i=0; i<10; i++){ + input[i] = Integer.parseInt(st.nextToken()); + } + + simulation(); + dfs(0, 0, horse); + System.out.println(max); + } + private static void simulation(){ + // 윷놀이판 이동 경로 설정 + for(int i=0; i<17; i++){ + for(int j=1; j<=5; j++){ // 윷 놀이 1~5칸 이동 가능 + move[i][j] = i+j; + } + } + + // 파란칸 도착 시 이동 경로 설정 + move[5] = new int[]{0, 21, 22, 23, 29, 30}; // 0~5칸 이동 + move[10] = new int[]{0, 24, 25, 29, 30, 31}; + move[15] = new int[]{0, 26, 27, 28, 29, 30}; + + // 직선 경로 제외 이동 경로 설정 + move[21] = new int[]{0, 22, 23, 29, 30, 31}; // 13~ + move[22] = new int[]{0, 23, 29, 30, 31, 20}; + move[23] = new int[]{0, 29, 30, 31, 20, 32}; // ~19 + + move[24] = new int[]{0, 25, 29, 30, 31, 20}; + move[25] = new int[]{0, 29, 30, 31, 20, 32}; + move[26] = new int[]{0, 27, 28, 29, 30, 31}; + move[27] = new int[]{0, 28, 29, 30, 31, 20}; + move[28] = new int[]{0, 29, 30, 31, 20, 32}; + move[29] = new int[]{0, 30, 31, 20, 32, 32}; + move[30] = new int[]{0, 31, 20, 32, 32, 32}; + move[31] = new int[]{0, 20, 32, 32, 32, 32}; + + // 도착 지점 경로 설정 + move[16][5] = 32; + move[17] = new int[]{0, 18, 19, 20, 32, 32}; + move[18] = new int[]{0, 19, 20, 32, 32, 32}; + move[19] = new int[]{0, 20, 32, 32, 32, 32}; + move[20] = new int[]{0, 32, 32, 32, 32, 32}; + } + static void dfs(int moveCnt, int score, int[] horse){ + if(moveCnt==10){ // 10번 이동 완료 시 + max = Math.max(max, score); + return; + } + for(int i=0; i<4; i++){ + int cur = horse[i]; + if(cur==32){ // 도착하면 움직이지않음 + continue; + } + int next = move[cur][input[moveCnt]]; // 다음 위치 계산 + boolean flag = true; + for(int j=0; j<4; j++){ // 겹치지 않아야함 + if(i!=j && horse[j]==next && next !=32){ // 도착시 움직이지 않음 + flag = false; + break; + } + } + if(!flag){ + continue; + } + horse[i] = next; // 말 이동 + dfs(moveCnt+1, score+board[next], horse); + horse[i] = cur; // 상태 복원? + } + + } +} \ No newline at end of file From 64bf40a44c2336baafe5a84da0447e5e4dcad521 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Tue, 17 Dec 2024 22:46:03 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[SQL]=20Co?= =?UTF-8?q?nfirmation=20Rate=5F241217?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "SQL/15\354\243\274\354\260\250/HW_Confirmation Rate.sql" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "SQL/15\354\243\274\354\260\250/HW_Confirmation Rate.sql" diff --git "a/SQL/15\354\243\274\354\260\250/HW_Confirmation Rate.sql" "b/SQL/15\354\243\274\354\260\250/HW_Confirmation Rate.sql" new file mode 100644 index 00000000..b6b1cf38 --- /dev/null +++ "b/SQL/15\354\243\274\354\260\250/HW_Confirmation Rate.sql" @@ -0,0 +1,8 @@ +SELECT s.user_id, + CASE WHEN c.user_id IS NULL THEN 0 -- NULL일시 0 출력 + ELSE ROUND(SUM(c.action = 'confirmed') / COUNT(s.user_id), 2) + END AS confirmation_rate +FROM Signups s + LEFT JOIN Confirmations c + ON s.user_id = c.user_id +GROUP BY s.user_id; \ No newline at end of file From 84c8903e6791751d45d574d4a6b95891b0b58b16 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Wed, 18 Dec 2024 09:37:15 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[BOJ]=2019?= =?UTF-8?q?92=20=EC=BF=BC=EB=93=9C=ED=8A=B8=EB=A6=AC=5F241217?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/HW_1992.java" | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/HW_1992.java" diff --git "a/BOJ/1000-5000\353\262\210/HW_1992.java" "b/BOJ/1000-5000\353\262\210/HW_1992.java" new file mode 100644 index 00000000..afbda90a --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/HW_1992.java" @@ -0,0 +1,48 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class HW_1992 { + static int N; + static char[][] board; + static StringBuilder sb = new StringBuilder(); + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int N = Integer.parseInt(br.readLine()); + board = new char[N][N]; + for(int i=0; i Date: Thu, 19 Dec 2024 11:32:51 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[BOJ]=2010?= =?UTF-8?q?30=20=ED=94=84=EB=A0=89=ED=83=88=20=ED=8F=89=EB=A9=B4=5F241217?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/HW_1030.java" | 52 ++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/HW_1030.java" diff --git "a/BOJ/1000-5000\353\262\210/HW_1030.java" "b/BOJ/1000-5000\353\262\210/HW_1030.java" new file mode 100644 index 00000000..90c68997 --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/HW_1030.java" @@ -0,0 +1,52 @@ +import java.io.*; +import java.util.*; + +// 프렉탈 평면이 단위 시간이 진행될 때 마다 크기가 증가함 +// 프랙탈 한변 길이 : N^S +// 검정색 영역이 아닌 경우 색을 결정할 수 없음 +// 현재 시간에서 해당 위치 어떤 색인지 결정 X +// 색을 결정하려면? 더 작은 블록(상위 패턴)의 좌표로 이동해서 재귀적으로 확인 해줘야함 +public class HW_1030 { + static int S, N, K, R1, R2, C1, C2; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + S = Integer.parseInt(st.nextToken()); // 시간 + N = Integer.parseInt(st.nextToken()); // 분할 크기 + K = Integer.parseInt(st.nextToken()); // 검정 영역 크기 + R1 = Integer.parseInt(st.nextToken()); + R2 = Integer.parseInt(st.nextToken()); + C1 = Integer.parseInt(st.nextToken()); + C2 = Integer.parseInt(st.nextToken()); + + int size = (int) Math.pow(N, S); // 프랙탈 한변 길이 : N^S + + // 주어진 범위만 확인 + for (int r = R1; r <= R2; r++) { + for (int c = C1; c <= C2; c++) { + System.out.print(isCheck(r, c, size)); // 각 좌표의 색 계산 + } + System.out.println(); + } + } + + static int isCheck(int r, int c, int size) { + if (size == 1) { // 단위 시간 0일 때 + return 0; // 흰색(0) 정사각형 한 개 + } + + int curSize = size / N; // 현재 블록 크기 + int s = curSize * (N - K) / 2; // 검정 영역 시작 + int e = curSize * (N + K) / 2; // 검정 영역 끝 + + // 현재 좌표가 검정 영역에 속하면 색을 바로 반환(1) + if (s <= r && r < e && s <= c && c < e) { + return 1; + } + + // 검정 영역에 속하지 않으면 + // 좌표를 상위 블록으로 변환하여 재귀적으로 확인 + return isCheck(r % curSize, c % curSize, curSize); + } +} From eeee78e462cdcdf927a28bbce63924b7f1a125f0 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Fri, 20 Dec 2024 22:48:52 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[BOJ]=2093?= =?UTF-8?q?72=20=EC=83=81=EA=B7=BC=EC=9D=B4=EC=9D=98=20=EC=97=AC=ED=96=89?= =?UTF-8?q?=5F241219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/HW_9372.java" | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/HW_9372.java" diff --git "a/BOJ/1000-5000\353\262\210/HW_9372.java" "b/BOJ/1000-5000\353\262\210/HW_9372.java" new file mode 100644 index 00000000..fb8e89e4 --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/HW_9372.java" @@ -0,0 +1,25 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +// 주어지는 비행 스케줄은 항상 연결 그래프를 이룸 -> MST(최소 스패닝트리) +// 모든 국가를 연결하는데 필요한 최선 간선의 수 찾기 +// 연결된 그래프에서 MST 간선수 : N-1개 +public class HW_9372 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + int T = Integer.parseInt(br.readLine()); + + for(int i=0; i Date: Fri, 20 Dec 2024 23:11:17 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[SQL]=20Se?= =?UTF-8?q?cond=20Highest=20Salary=5F241219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HW_Second Highest Salary.sql" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "SQL/15\354\243\274\354\260\250/HW_Second Highest Salary.sql" diff --git "a/SQL/15\354\243\274\354\260\250/HW_Second Highest Salary.sql" "b/SQL/15\354\243\274\354\260\250/HW_Second Highest Salary.sql" new file mode 100644 index 00000000..15df45c8 --- /dev/null +++ "b/SQL/15\354\243\274\354\260\250/HW_Second Highest Salary.sql" @@ -0,0 +1,7 @@ +-- 두번째로 큰 salary 값 출력하기, 없으면 null 출력 +SELECT IFNULL( + (SELECT DISTINCT salary + FROM Employee + ORDER BY salary DESC + LIMIT 1 OFFSET 1), null) +as SecondHighestSalary; \ No newline at end of file From 015003cd7f98e033ae1f1848088f2dca8ba7efc8 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Sat, 21 Dec 2024 15:49:30 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[BOJ]=2017?= =?UTF-8?q?25=20=ED=9E=88=EC=8A=A4=ED=86=A0=EA=B7=B8=EB=9E=A8=5F241218?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/HW_1725.java" | 34 ++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/HW_1725.java" diff --git "a/BOJ/1000-5000\353\262\210/HW_1725.java" "b/BOJ/1000-5000\353\262\210/HW_1725.java" new file mode 100644 index 00000000..613c39df --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/HW_1725.java" @@ -0,0 +1,34 @@ + +import java.io.*; +import java.util.*; + +// N<= 10^5 시간 복잡도 : O(N) +public class HW_1725 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + int[] heights = new int[N+1]; + + for(int i=0; i stack = new Stack<>(); // 막대 높이를 저장 + long max = 0; // 막대의 높이(10^9) * 너비(10^5) -> long + + for(int i=0; i 현재 인덱스(i)가 넓이 w=i; + // 스택이 비어있지X 경우 -> 왼쪽 경계(왼쪽에 남아있는 막대) w = i - stack.peek()-1; + // 현재 막대와의 간격만큼만 직사각형을 확장할 수 있기 때문 + max = Math.max(max, (long)h*w);// 꺼낸 높이 기준으로 넓이 계산 + } + stack.push(i); + } + return max; + } +} From 030176dbee4cb80dd6ea9c476fb0b1bfafe8ce6e Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Sat, 21 Dec 2024 15:50:17 +0900 Subject: [PATCH 08/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[BOJ]=2048?= =?UTF-8?q?03=20=ED=8A=B8=EB=A6=AC=5F241219?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "BOJ/1000-5000\353\262\210/HW_4803.java" | 84 ++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 "BOJ/1000-5000\353\262\210/HW_4803.java" diff --git "a/BOJ/1000-5000\353\262\210/HW_4803.java" "b/BOJ/1000-5000\353\262\210/HW_4803.java" new file mode 100644 index 00000000..b2f3f531 --- /dev/null +++ "b/BOJ/1000-5000\353\262\210/HW_4803.java" @@ -0,0 +1,84 @@ +import java.io.*; +import java.util.*; + +// 시간복잡도 : O(V+E) +public class HW_4803 { + static List> graph; + static boolean[] visited; + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int test = 1; + + while(true){ + StringTokenizer st = new StringTokenizer(br.readLine()); + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + + if(N == 0 && M == 0) { + break; + } + graph = new ArrayList<>(); + for(int i=0; i<=N; i++) { + graph.add(new ArrayList<>()); + } + + for(int i=0; i queue = new LinkedList<>(); // 큐 초기화 + queue.add(new int[] {node, parent}); // {탐색 시작할 정점, node의 부모 정점} + visited[node] = true; + int nodeCnt = 0; // 연결 요소에서 방문한 정점 개수 cnt + int edgeCnt = 0; // 연결 요소에서 방문한 간선 개수 cnt + + while(!queue.isEmpty()) { + int[] cur = queue.poll(); // 큐에서 현재 노드, 부모 노드를 가져옴 + int curNode = cur[0]; // 현재 노드 + int curParent = cur[1]; // 부모 노드 + + nodeCnt++; // 정점 개수++ + + for(int i=0; i Date: Sat, 21 Dec 2024 15:51:30 +0900 Subject: [PATCH 09/10] =?UTF-8?q?=EC=9D=B4=ED=98=9C=EC=9B=90:=20[PG]=20428?= =?UTF-8?q?92=20=EA=B8=B8=20=EC=B0=BE=EA=B8=B0=20=EA=B2=8C=EC=9E=84=5F2412?= =?UTF-8?q?20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Programmers/Level3/HW_42892.java | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Programmers/Level3/HW_42892.java diff --git a/Programmers/Level3/HW_42892.java b/Programmers/Level3/HW_42892.java new file mode 100644 index 00000000..801e85e6 --- /dev/null +++ b/Programmers/Level3/HW_42892.java @@ -0,0 +1,76 @@ +import java.util.*; + +// 시간복잡도 : nodeinfo < 10,000 -> O(N^2) 이하 +class HW_42892 { + static int index; + static int[][] answer; + static class Node{ + int x, y, number; + Node left, right; + + Node(int x, int y, int number){ + this.x = x; + this.y = y; + this.number = number; + } + } + public int[][] solution(int[][] nodeinfo) { + Node[] nodes= new Node[nodeinfo.length]; + + for(int i=0; i{ // 노드 정렬 + if(a.y != b.y){ + return b.y - a.y; // y 내림차순 + } + return a.x - b.x; // x 오름차순 + }); + + // 트리 생성 + Node root = nodes[0]; + for(int i=1; i왼쪽->오른쪽) + index = 0; // 인덱스 초기화 + postorder(root); // 후위 순회(왼쪽->오른쪽->부모) + + return answer; + + } + static void insertNode(Node parent, Node child) { + if (child.x < parent.x) { // 왼쪽 서브트리 + if (parent.left == null) { + parent.left = child; + } else { + insertNode(parent.left, child); + } + } else { // 오른쪽 서브트리 + if (parent.right == null) { + parent.right = child; + } else { + insertNode(parent.right, child); + } + } + } + + static void preorder(Node node){ + if(node != null){ + answer[0][index++] = node.number; // 부모 노드 방문 + preorder(node.left); // 왼쪽 서브트리 방문 + preorder(node.right); // 오른쪽 서브트리 방문 + } + } + static void postorder(Node node){ + if(node != null){ + postorder(node.left); // 왼쪽 서브트리 방문 + postorder(node.right); // 오른쪽 서브트리 방문 + answer[1][index++] = node.number; // 부모 노드 방문 + } + } +} \ No newline at end of file From 87a02a33a9d35a503e1114dffeb20a3bde38b465 Mon Sep 17 00:00:00 2001 From: icegosimperson Date: Sat, 21 Dec 2024 19:27:05 +0900 Subject: [PATCH 10/10] =?UTF-8?q?docs:=20=EC=A7=81=EC=84=A0=20=EA=B2=BD?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EC=88=98=20=EB=B2=94=EC=9C=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" "b/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" index be52eeff..2e30fc36 100644 --- "a/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" +++ "b/CodeTree/2019-2020\353\205\204/HW_\354\234\267\353\206\200\354\235\264_\354\202\254\352\270\260\353\213\250.java" @@ -26,7 +26,7 @@ public static void main(String[] args) throws IOException{ } private static void simulation(){ // 윷놀이판 이동 경로 설정 - for(int i=0; i<17; i++){ + for(int i=0; i<20; i++){ // 직선 경로 이동 처리 for(int j=1; j<=5; j++){ // 윷 놀이 1~5칸 이동 가능 move[i][j] = i+j; }