From 283eebe6d5357a31bc1e488426f6febd0cb7e363 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Thu, 1 Aug 2024 01:53:05 +0900 Subject: [PATCH 01/12] =?UTF-8?q?2024-07-31=20=EC=A0=95=EC=88=98=20?= =?UTF-8?q?=EC=82=BC=EA=B0=81=ED=98=95.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...210\230 \354\202\274\352\260\201\355\230\225.py" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "LJEDD2/2024-2/\353\213\244\354\235\264\353\202\230\353\257\271\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/\354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.py" diff --git "a/LJEDD2/2024-2/\353\213\244\354\235\264\353\202\230\353\257\271\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/\354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.py" "b/LJEDD2/2024-2/\353\213\244\354\235\264\353\202\230\353\257\271\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/\354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.py" new file mode 100644 index 00000000..74c9f45b --- /dev/null +++ "b/LJEDD2/2024-2/\353\213\244\354\235\264\353\202\230\353\257\271\355\224\204\353\241\234\352\267\270\353\236\230\353\260\215/\354\240\225\354\210\230 \354\202\274\352\260\201\355\230\225.py" @@ -0,0 +1,13 @@ +def solution(triangle): + for row in range(1, len(triangle)): + for col in range(row + 1): + if col == 0: + triangle[row][col] += triangle[row-1][col] # 바로 위 행 같은 열 + elif col == row: + triangle[row][col] += triangle[row-1][col-1] # 바로 위 행의 왼쪽 열 + else: + right, left = triangle[row-1][col], triangle[row-1][col-1] + triangle[row][col] += max(right, left) # 두 값 중 더 큰 값 + + answer = max(triangle[-1]) + return answer \ No newline at end of file From cd7997b423697ec7ff3abaec254f6c132952e8a4 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Thu, 1 Aug 2024 01:56:09 +0900 Subject: [PATCH 02/12] 2024-07-31 --- LJEDD2/2024-2/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index 08556df7..262f09bb 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -5,4 +5,6 @@ | 1차시 | 2024.07.17 | 이분탐색 | 입국심사 | [#1](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/123) | | 2차시 | 2024.07.20 | 다이나믹프로그래밍 | N으로 표현 | [#2](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/126) | | 3차시 | 2024.07.24 | 깊이/너비 우선 탐색(DFS/BFS) | 여행경로 | [#3](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/131) | +| 4차시 | 2024.07.27 | 그래프 | 가장 먼 노드 | [#4](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/133) | +| 5차시 | 2024.07.31 | 다이나믹프로그래밍 | 정수 삼각형 | [#5](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/139) | --- \ No newline at end of file From 4f20884858d5a17e1fe428f390e6515c7267121f Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Sat, 3 Aug 2024 23:36:55 +0900 Subject: [PATCH 03/12] =?UTF-8?q?2024-08-03=20=ED=94=BC=EB=A1=9C=EB=8F=84.?= =?UTF-8?q?py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\355\224\274\353\241\234\353\217\204..py" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "LJEDD2/2024-2/\354\231\204\354\240\204\355\203\220\354\203\211/\355\224\274\353\241\234\353\217\204..py" diff --git "a/LJEDD2/2024-2/\354\231\204\354\240\204\355\203\220\354\203\211/\355\224\274\353\241\234\353\217\204..py" "b/LJEDD2/2024-2/\354\231\204\354\240\204\355\203\220\354\203\211/\355\224\274\353\241\234\353\217\204..py" new file mode 100644 index 00000000..da273b4f --- /dev/null +++ "b/LJEDD2/2024-2/\354\231\204\354\240\204\355\203\220\354\203\211/\355\224\274\353\241\234\353\217\204..py" @@ -0,0 +1,49 @@ +# 첫 번째 코드 +def solution(k, dungeons): + + def DFS(k, cnt): + nonlocal answer + + answer = max(answer, cnt) + for i in range(len(dungeons)): + # 던전 = ["최소 필요 피로도", "소모 피로도"] + min_fatigue, use_fatigue = dungeons[i][0], dungeons[i][1] + + # 현재 피로도가 해당 던전을 방문하기 위한 최소 피로도보다 클 때 + if not visited[i] and k >= min_fatigue: + visited[i] = True + + # 백트래킹 : 이전 노드로 다시 back할 때, + # 해당 노드를 방문하기 전의 피로도로 다시 복구 + DFS(k-use_fatigue, cnt+1) + visited[i] = False + + answer = 0 + visited = [False] * len(dungeons) # visited + DFS(k, 0) + + return answer + + +# 개선된 코드 +def solution(k, dungeons): + def dfs(k, cnt): + # 함수 내부에서 값을 갱신할 수 있는 비전역 변수로 선언 + nonlocal answer + + answer = max(answer, cnt) + + # enumerate()를 활용하여 각 던전의 인덱스와 값을 동시에 반복 + for i, (min_fatigue, use_fatigue) in enumerate(dungeons): + + if not visited[i] and k >= min_fatigue: + + visited[i] = True + dfs(k - use_fatigue, cnt + 1) + visited[i] = False + + answer = 0 + visited = [False] * len(dungeons) + dfs(k, 0) + + return answer \ No newline at end of file From 9ed98a6b1279a852bcebef699f396b44802fe5cf Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Sat, 3 Aug 2024 23:38:23 +0900 Subject: [PATCH 04/12] 2024-08-03 --- LJEDD2/2024-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index 2feff67d..1dd7f96b 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -7,3 +7,4 @@ | 3차시 | 2024.07.24 | 깊이/너비 우선 탐색(DFS/BFS) | 여행경로 | [#3](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/131) | | 4차시 | 2024.07.27 | 그래프 | 가장 먼 노드 | [#4](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/133) | | 5차시 | 2024.07.31 | 다이나믹프로그래밍 | 정수 삼각형 | [#5](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/139) | +| 6차시 | 2024.08.03 | 완전탐색 | 피로도 | [#6](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/141) | From 0449806a6c87db2c0295742bf69b862f98119a26 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Mon, 2 Sep 2024 22:58:59 +0900 Subject: [PATCH 05/12] =?UTF-8?q?2024-09-01=20=EC=A4=84=20=EC=84=B8?= =?UTF-8?q?=EC=9A=B0=EA=B8=B0.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \354\204\270\354\232\260\352\270\260.py" | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 "LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" diff --git "a/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" new file mode 100644 index 00000000..c6538ecc --- /dev/null +++ "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" @@ -0,0 +1,28 @@ +# BOJ2252 줄 세우기 +from collections import deque + +n, m = map(int, input().split()) +graph = [[] for _ in range(n + 1)] +indegree = [0] * (n + 1) # 진입 차수 저장할 리스트 + +for i in range(m): + s,e = map(int, input().split()) + [s].append(e) + indegree[e] += 1 # 진입 차수 데이터를 저장 + +# B를 하기 위해 A라는 작업을 먼저 해야 하는 구조가 있을 때, +# 그 작업 순서를 구해주는 것 = 위상정렬 + +queue = deque() +for i in range(1, n + 1): + if not indegree[i]: + queue.append(i) + +while queue: # 위상 정렬 수행 , 진입 차수 없애! + now = queue.popleft() + print(now, end=' ') + + for next in graph[now]: + indegree[next] -= 1 # 진입 차수 0인 정점 큐에 삽입 + if not indegree[next]: + queue.append(next) \ No newline at end of file From 2502f35f9b06c6a3fe67569135775202d824042a Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Mon, 2 Sep 2024 23:01:00 +0900 Subject: [PATCH 06/12] 2024-09-01 --- LJEDD2/2024-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index 1dd7f96b..42cdac8c 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -8,3 +8,4 @@ | 4차시 | 2024.07.27 | 그래프 | 가장 먼 노드 | [#4](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/133) | | 5차시 | 2024.07.31 | 다이나믹프로그래밍 | 정수 삼각형 | [#5](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/139) | | 6차시 | 2024.08.03 | 완전탐색 | 피로도 | [#6](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/141) | +| 7차시 | 2024.09.01 | 위상정렬 | 줄 세우기 | [#7](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/152) | From a25db22a24c901653cf4549b419ec406d0854ab6 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Mon, 2 Sep 2024 23:04:14 +0900 Subject: [PATCH 07/12] =?UTF-8?q?2024-09-02=20=EC=A4=84=EC=84=B8=EC=9A=B0?= =?UTF-8?q?=EA=B8=B0=20=EC=98=A4=ED=83=80=EC=88=98=EC=A0=95.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\244\204 \354\204\270\354\232\260\352\270\260.py" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" index c6538ecc..cd748053 100644 --- "a/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" +++ "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\354\244\204 \354\204\270\354\232\260\352\270\260.py" @@ -7,7 +7,7 @@ for i in range(m): s,e = map(int, input().split()) - [s].append(e) + graph[s].append(e) # zz indegree[e] += 1 # 진입 차수 데이터를 저장 # B를 하기 위해 A라는 작업을 먼저 해야 하는 구조가 있을 때, From 524c9a3332bc6d069604c74f68c22eed937e19d1 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Thu, 5 Sep 2024 22:28:19 +0900 Subject: [PATCH 08/12] =?UTF-8?q?2024-09-05=20=EB=AC=B8=EC=A0=9C=EC=A7=91.?= =?UTF-8?q?py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\353\254\270\354\240\234\354\247\221.py" | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 "LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\353\254\270\354\240\234\354\247\221.py" diff --git "a/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\353\254\270\354\240\234\354\247\221.py" "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\353\254\270\354\240\234\354\247\221.py" new file mode 100644 index 00000000..8398f5c4 --- /dev/null +++ "b/LJEDD2/2024-2/\354\234\204\354\203\201\354\240\225\353\240\254/\353\254\270\354\240\234\354\247\221.py" @@ -0,0 +1,33 @@ +# BOJ1766 문제집 +# 위상정렬 + 우선순위 큐 + +import heapq + +n, m = map(int, input().split()) +graph = [[] for _ in range(n + 1)] +indegree = [0] * (n + 1) # 진입 차수 리스트 + +for i in range(m): + s, e = map(int, input().split()) + graph[s].append(e) + indegree[e] += 1 # 진입 차수 데이터 저장 + +# 문제에서 가능한 앞 번호의 문제부터 풀어야 함 -> 우선순위큐,,? +# 1~N의 난이도 순 대로 + +queue = [] + +# 순서 +for i in range(1, n + 1): + if indegree[i] == 0: + heapq.heappush(queue, i) # 진입차수가 0인거 먼저 난이도랑 저장 + +while queue: + now = heapq.heappop(queue) + print(now, end=' ') + + for i in graph[now]: # 위상 정렬 수행 , 진입 차수 없애! + indegree[i] -= 1 + + if indegree[i] == 0: + heapq.heappush(queue, i) \ No newline at end of file From 6f3d215a4b92f99263be390a13f793d04d34140a Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Thu, 5 Sep 2024 22:29:42 +0900 Subject: [PATCH 09/12] 2024-09-05 --- LJEDD2/2024-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index 42cdac8c..fb0e7d6b 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -9,3 +9,4 @@ | 5차시 | 2024.07.31 | 다이나믹프로그래밍 | 정수 삼각형 | [#5](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/139) | | 6차시 | 2024.08.03 | 완전탐색 | 피로도 | [#6](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/141) | | 7차시 | 2024.09.01 | 위상정렬 | 줄 세우기 | [#7](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/152) | +| 8차시 | 2024.09.04 | 위상정렬 | 문제집 | [#8](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/154) | From 97c1258d7f672b7d74b33f71c347baa553978347 Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Sat, 7 Sep 2024 22:48:38 +0900 Subject: [PATCH 10/12] =?UTF-8?q?2024-09-07=20=EC=9B=90=EC=88=AD=EC=9D=B4?= =?UTF-8?q?=20=EB=A7=A4=EB=8B=AC=EA=B8=B0.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \353\247\244\353\213\254\352\270\260.py" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" diff --git "a/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" "b/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" new file mode 100644 index 00000000..42809716 --- /dev/null +++ "b/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" @@ -0,0 +1,22 @@ +import sys + +input = sys.stdin.readline + +for _ in range(int(input())): + s = input().rstrip() # 괄호 문자열 + + max_depth = 0 # 최대 깊이를 저장할 변수 + tree = list() # 현재 열린 괄호를 저장할 스택임 + + for i in s: + # 여는 괄호일 경우 스택에 열린 괄호 추가 + if i == '[': + tree.append('[') + continue + # 닫는 괄호일 경우 + max_depth = max(len(tree), max_depth) + # 현재 깊이와 최대 깊이 중 큰 값을 저장하고 + tree.pop() # 마지막 열린 괄호를 제거 + + print(2 ** max_depth) # 쌍을 이룰때 가지 생성, 가지2-.1개씩 나눠가짐 + # 결국엔 2의 depth승 \ No newline at end of file From 079a6e506dc1ab97c1f8347a0fd9015d4323000d Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Sat, 7 Sep 2024 22:49:53 +0900 Subject: [PATCH 11/12] 2024-09-07 --- LJEDD2/2024-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index fb0e7d6b..f93efc8c 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -10,3 +10,4 @@ | 6차시 | 2024.08.03 | 완전탐색 | 피로도 | [#6](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/141) | | 7차시 | 2024.09.01 | 위상정렬 | 줄 세우기 | [#7](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/152) | | 8차시 | 2024.09.04 | 위상정렬 | 문제집 | [#8](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/154) | +| 9차시 | 2024.09.07 | 스택 | 원숭이 매달기 | [#9](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/156) | \ No newline at end of file From 0e8b0149cc2f8f115becb6b538e9f0e035e9380f Mon Sep 17 00:00:00 2001 From: ljedd2 Date: Sun, 8 Sep 2024 20:22:13 +0900 Subject: [PATCH 12/12] =?UTF-8?q?2024-09-08=20=EC=9B=90=EC=88=AD=EC=9D=B4?= =?UTF-8?q?=20=EB=A7=A4=EB=8B=AC=EA=B8=B0.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문자열 풀이 --- ...4 \353\247\244\353\213\254\352\270\260.py" | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git "a/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" "b/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" index 42809716..4fd77b0c 100644 --- "a/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" +++ "b/LJEDD2/2024-2/\354\212\244\355\203\235/\354\233\220\354\210\255\354\235\264 \353\247\244\353\213\254\352\270\260.py" @@ -1,22 +1,37 @@ +# 더 간단한 풀이 ... (문자열) import sys - input = sys.stdin.readline for _ in range(int(input())): - s = input().rstrip() # 괄호 문자열 - - max_depth = 0 # 최대 깊이를 저장할 변수 - tree = list() # 현재 열린 괄호를 저장할 스택임 - - for i in s: - # 여는 괄호일 경우 스택에 열린 괄호 추가 - if i == '[': - tree.append('[') - continue - # 닫는 괄호일 경우 - max_depth = max(len(tree), max_depth) - # 현재 깊이와 최대 깊이 중 큰 값을 저장하고 - tree.pop() # 마지막 열린 괄호를 제거 - - print(2 ** max_depth) # 쌍을 이룰때 가지 생성, 가지2-.1개씩 나눠가짐 - # 결국엔 2의 depth승 \ No newline at end of file + cnt = 0 + s = input().rstrip() + while "[]" in s: + s = s.replace("[]", "") + cnt += 1 + + print(2**cnt) + + + +# import sys + +# input = sys.stdin.readline + +# for _ in range(int(input())): +# s = input().rstrip() # 괄호 문자열 + +# max_depth = 0 # 최대 깊이를 저장할 변수 +# tree = list() # 현재 열린 괄호를 저장할 스택임 + +# for i in s: +# # 여는 괄호일 경우 스택에 열린 괄호 추가 +# if i == '[': +# tree.append('[') +# continue +# # 닫는 괄호일 경우 +# max_depth = max(len(tree), max_depth) +# # 현재 깊이와 최대 깊이 중 큰 값을 저장하고 +# tree.pop() # 마지막 열린 괄호를 제거 + +# print(2 ** max_depth) # 쌍을 이룰때 가지 생성, 가지2-.1개씩 나눠가짐 +# # 결국엔 2의 depth승 \ No newline at end of file