diff --git a/LJEDD2/2024-2/README.md b/LJEDD2/2024-2/README.md index a5e42eed..f93efc8c 100644 --- a/LJEDD2/2024-2/README.md +++ b/LJEDD2/2024-2/README.md @@ -6,4 +6,8 @@ | 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) | ---- \ No newline at end of file +| 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) | +| 9차시 | 2024.09.07 | 스택 | 원숭이 매달기 | [#9](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/156) | \ No newline at end of file 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 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..4fd77b0c --- /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,37 @@ +# 더 간단한 풀이 ... (문자열) +import sys +input = sys.stdin.readline + +for _ in range(int(input())): + 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 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 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 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..cd748053 --- /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()) + graph[s].append(e) # zz + 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