Skip to content

Commit

Permalink
2024-08-01 작업
Browse files Browse the repository at this point in the history
  • Loading branch information
janghw0126 committed Jul 31, 2024
1 parent d1c6e66 commit 7ee0e11
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 0 deletions.
3 changes: 3 additions & 0 deletions janghw0126/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,7 @@
||||||
| 1차시 | 2024.7.17 | 수학 | <a href= "https://www.acmicpc.net/problem/1241">머리 톡톡</a> |[#124](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/124) |
| 2차시 | 2024.7.21 | 그리디 | <a href= "https://www.acmicpc.net/problem/1931">회의실 배정</a> |[#127](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/127) |
| 3차시 | 2024.7.24 || <a href= "https://www.acmicpc.net/problem/5430">AC</a> |[#130](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/130) |
| 4차시 | 2024.7.28 | 분할 정복 | <a href= "https://www.acmicpc.net/problem/1074">Z</a> |[#135](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/135) |
| 5차시 | 2024.7.31 | 위상정렬 | <a href= "https://www.acmicpc.net/problem/2056">위상정렬</a> |[#138](https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/138) |
---
48 changes: 48 additions & 0 deletions janghw0126/덱/5430.py
Original file line number Diff line number Diff line change
@@ -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) + "]")
32 changes: 32 additions & 0 deletions janghw0126/분할 정복/1074.py
Original file line number Diff line number Diff line change
@@ -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)
49 changes: 49 additions & 0 deletions janghw0126/위상정렬/2056.py
Original file line number Diff line number Diff line change
@@ -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))

0 comments on commit 7ee0e11

Please sign in to comment.