From 7ee0e1149a5fa5cca603a0eed35db85d8d471822 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9E=A5=ED=98=9C=EC=9B=90?=
<127714800+janghw0126@users.noreply.github.com>
Date: Thu, 1 Aug 2024 00:16:13 +0900
Subject: [PATCH] =?UTF-8?q?2024-08-01=20=EC=9E=91=EC=97=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
janghw0126/README.md | 3 ++
"janghw0126/\353\215\261/5430.py" | 48 ++++++++++++++++++
.../1074.py" | 32 ++++++++++++
.../2056.py" | 49 +++++++++++++++++++
4 files changed, 132 insertions(+)
create mode 100644 "janghw0126/\353\215\261/5430.py"
create mode 100644 "janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py"
create mode 100644 "janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py"
diff --git a/janghw0126/README.md b/janghw0126/README.md
index a4f9a41..b8a4c77 100644
--- a/janghw0126/README.md
+++ b/janghw0126/README.md
@@ -33,4 +33,7 @@
||||||
| 1차시 | 2024.7.17 | 수학 | 머리 톡톡 |[#124](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/124) |
| 2차시 | 2024.7.21 | 그리디 | 회의실 배정 |[#127](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/127) |
+| 3차시 | 2024.7.24 | 덱 | AC |[#130](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/130) |
+| 4차시 | 2024.7.28 | 분할 정복 | Z |[#135](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/135) |
+| 5차시 | 2024.7.31 | 위상정렬 | 위상정렬 |[#138](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/138) |
---
diff --git "a/janghw0126/\353\215\261/5430.py" "b/janghw0126/\353\215\261/5430.py"
new file mode 100644
index 0000000..c68e6f8
--- /dev/null
+++ "b/janghw0126/\353\215\261/5430.py"
@@ -0,0 +1,48 @@
+import sys
+from collections import deque
+
+input = sys.stdin.readline
+t = int(input())
+
+for _ in range(t):
+ commands = input().strip() # 명령어 문자열
+ num_elements = int(input()) # 배열의 원소 개수
+ elements = input().strip()[1:-1] # 대괄호를 제거하고 배열 요소를 가져오기
+
+ # 덱 초기화: 빈 문자열이 아니면 쉼표로 구분하여 덱으로 변환
+ if elements:
+ dq = deque(elements.split(','))
+ else:
+ dq = deque()
+
+ is_reversed = False # 배열의 순서를 뒤집었는지 여부를 나타냄
+ error_occurred = False # 오류가 발생했는지를 나타냄
+
+ # 명령어를 순차적으로 처리
+ for command in commands:
+ if command == 'R':
+ # R 명령어가 나오면 뒤집기 플래그를 반전
+ is_reversed = not is_reversed
+ elif command == 'D':
+ # D 명령어 처리
+ if not dq:
+ # 덱이 비어있으면 에러 출력
+ print("error")
+ error_occurred = True
+ break
+ if is_reversed:
+ # 뒤집힌 상태에서는 덱의 끝에서 제거
+ dq.pop()
+ else:
+ # 정상 상태에서는 덱의 앞에서 제거
+ dq.popleft()
+
+ if error_occurred:
+ continue # 에러가 발생하면 다음 테스트 케이스로 넘어감
+
+ if is_reversed:
+ # 최종 상태가 뒤집힌 경우 덱을 뒤집음
+ dq.reverse()
+
+ # 덱을 문자열로 변환하여 출력
+ print("[" + ",".join(dq) + "]")
\ No newline at end of file
diff --git "a/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py" "b/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py"
new file mode 100644
index 0000000..3fc7943
--- /dev/null
+++ "b/janghw0126/\353\266\204\355\225\240 \354\240\225\353\263\265/1074.py"
@@ -0,0 +1,32 @@
+# 사용자 입력 받기: N, row, col
+N, row, col = map(int, input().split())
+
+# 정답 변수 초기화
+result = 0
+
+# N이 0이 될 때까지 반복
+while N != 0:
+ N -= 1
+
+ # 2사분면
+ if row < 2 ** N and col < 2 ** N:
+ result += (2 ** N) * (2 ** N) * 0 # 2사분면은 추가값이 없음
+
+ # 1사분면
+ elif row < 2 ** N and col >= 2 ** N:
+ result += (2 ** N) * (2 ** N) * 1 # 1사분면은 첫 번째 사분면의 추가값
+ col -= (2 ** N) # 열 인덱스 조정
+
+ # 3사분면
+ elif row >= 2 ** N and col < 2 ** N:
+ result += (2 ** N) * (2 ** N) * 2 # 3사분면은 두 번째 사분면의 추가값
+ row -= (2 ** N) # 행 인덱스 조정
+
+ # 4사분면
+ else:
+ result += (2 ** N) * (2 ** N) * 3 # 4사분면은 세 번째 사분면의 추가값
+ row -= (2 ** N) # 행 인덱스 조정
+ col -= (2 ** N) # 열 인덱스 조정
+
+# 최종 결과 출력
+print(result)
\ No newline at end of file
diff --git "a/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py" "b/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py"
new file mode 100644
index 0000000..0693e52
--- /dev/null
+++ "b/janghw0126/\354\234\204\354\203\201\354\240\225\353\240\254/2056.py"
@@ -0,0 +1,49 @@
+import sys
+from collections import deque
+input = sys.stdin.readline
+
+def topological_sort_and_compute_times(n, task_times, dependencies):
+ # 그래프와 진입 차수 초기화
+ graph = {i: [] for i in range(1, n + 1)}
+ indegree = [0] * (n + 1)
+ completion_time = [0] * (n + 1)
+
+ # 작업 시간 초기화
+ for i in range(1, n + 1):
+ completion_time[i] = task_times[i]
+
+ # 그래프와 진입 차수 설정
+ for a, b in dependencies:
+ graph[a].append(b)
+ indegree[b] += 1
+
+ # 진입 차수가 0인 노드를 큐에 추가
+ queue = deque()
+ for i in range(1, n + 1):
+ if indegree[i] == 0:
+ queue.append(i)
+
+ # 위상 정렬과 작업 완료 시간 계산
+ while queue:
+ current = queue.popleft()
+ for neighbor in graph[current]:
+ completion_time[neighbor] = max(completion_time[neighbor], completion_time[current] + task_times[neighbor])
+ indegree[neighbor] -= 1
+ if indegree[neighbor] == 0:
+ queue.append(neighbor)
+
+ return max(completion_time[1:])
+
+n = int(input().strip())
+task_times = [0] * (n + 1)
+dependencies = []
+
+# 작업 시간 입력
+for i in range(1, n + 1):
+ data = list(map(int, input().split()))
+ task_times[i] = data[0]
+ m = data[1]
+ for j in range(m):
+ dependencies.append((data[2 + j], i))
+
+print(topological_sort_and_compute_times(n, task_times, dependencies))